11import { beforeEach , describe , expect , test , vi } from "vitest"
22import { setActivePinia , createPinia } from "pinia"
3- import { viewer_call } from "@/composables/viewer_call .js"
3+ import { useProjectManager } from "@/composables/project_manager .js"
44
55// Mocks
66const mockAppStore = {
@@ -9,67 +9,82 @@ const mockAppStore = {
99}
1010const mockInfraStore = { create_connection : vi . fn ( ) }
1111
12- vi . mock ( "@/stores/app_store .js" , ( ) => ( { useAppStore : ( ) => mockAppStore } ) )
12+ vi . mock ( "@/stores/app .js" , ( ) => ( { useAppStore : ( ) => mockAppStore } ) )
1313vi . mock ( "@ogw_f/stores/infra" , ( ) => ( { useInfraStore : ( ) => mockInfraStore } ) )
1414vi . mock ( "@/composables/viewer_call.js" , ( ) => ( {
1515 default : vi . fn ( ) ,
1616 viewer_call : vi . fn ( ) ,
1717} ) )
1818
19- const projectManagerPlugin = {
20- provide : {
21- project : {
22- export : vi . fn ( ) ,
23- importFile : vi . fn ( ) ,
19+ vi . mock ( "@/stores/geode.js" , ( ) => ( {
20+ useGeodeStore : ( ) => ( {
21+ base_url : "http://localhost:5000" ,
22+ start_request : vi . fn ( ) ,
23+ stop_request : vi . fn ( ) ,
24+ do_ping : vi . fn ( ) ,
25+ } ) ,
26+ } ) )
27+
28+ vi . mock (
29+ "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json" ,
30+ ( ) => ( {
31+ default : {
32+ opengeodeweb_back : {
33+ project : {
34+ export_project : { route : "/project/export_project" , methods : [ "POST" ] } ,
35+ } ,
36+ } ,
2437 } ,
25- } ,
26- }
38+ } ) ,
39+ )
40+ vi . mock (
41+ "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json" ,
42+ ( ) => ( {
43+ default : {
44+ opengeodeweb_viewer : {
45+ utils : { import_project : { rpc : "utils.import_project" } } ,
46+ viewer : { reset_visualization : { rpc : "viewer.reset_visualization" } } ,
47+ } ,
48+ } ,
49+ } ) ,
50+ )
2751
2852beforeEach ( ( ) => setActivePinia ( createPinia ( ) ) )
2953
30- describe ( "ProjectManager plugin " , ( ) => {
54+ describe ( "ProjectManager composable " , ( ) => {
3155 test ( "exportProject triggers download" , async ( ) => {
3256 const mockElement = { href : "" , download : "" , click : vi . fn ( ) }
3357 vi . stubGlobal ( "document" , { createElement : ( ) => mockElement } )
3458 vi . stubGlobal ( "URL" , {
3559 createObjectURL : ( ) => "blob:url" ,
3660 revokeObjectURL : vi . fn ( ) ,
3761 } )
62+ vi . stubGlobal (
63+ "fetch" ,
64+ vi . fn ( async ( ) => ( {
65+ ok : true ,
66+ blob : async ( ) =>
67+ new Blob ( [ "zipcontent" ] , { type : "application/zip" } ) ,
68+ headers : { get : ( ) => "project_123.zip" } ,
69+ } ) ) ,
70+ )
71+
72+ const { exportProject } = useProjectManager ( )
73+ await exportProject ( )
3874
39- projectManagerPlugin . provide . project . export = async ( ) => {
40- const snapshot = mockAppStore . exportStore ( )
41- const json = JSON . stringify ( snapshot , null , 2 )
42- const blob = new Blob ( [ json ] , { type : "application/json" } )
43- const url = URL . createObjectURL ( blob )
44- const a = document . createElement ( "a" )
45- a . href = url
46- a . download = `project_${ Date . now ( ) } .json`
47- a . click ( )
48- URL . revokeObjectURL ( url )
49- console . log ( "[TEST] URL's project :" , { a } )
50- }
51- await projectManagerPlugin . provide . project . export ( )
5275 expect ( mockAppStore . exportStore ) . toHaveBeenCalled ( )
76+ expect ( fetch ) . toHaveBeenCalledTimes ( 1 )
5377 expect ( mockElement . click ) . toHaveBeenCalled ( )
5478 } )
5579
5680 test ( "importProjectFile loads snapshot" , async ( ) => {
57- projectManagerPlugin . provide . project . importFile = async ( file ) => {
58- const raw = await file . text ( )
59- const snapshot = JSON . parse ( raw )
60- await mockInfraStore . create_connection ( )
61- viewer_call ( { } )
62- console . log (
63- "[TEST] viewer_call:" ,
64- viewer_call . mock ?. calls ,
65- viewer_call . mock ?. calls ?. length || 0 ,
66- )
67- await mockAppStore . importStore ( snapshot )
68- }
81+ const { importProjectFile } = useProjectManager ( )
82+
6983 const file = { text : ( ) => Promise . resolve ( '{"dataBase":{"db":{}}}' ) }
70- await projectManagerPlugin . provide . project . importFile ( file )
84+ await importProjectFile ( file )
85+
7186 expect ( mockInfraStore . create_connection ) . toHaveBeenCalled ( )
72- expect ( viewer_call ) . toHaveBeenCalled ( )
87+ expect ( ( await import ( "@/composables/viewer_call.js" ) ) . viewer_call ) . toHaveBeenCalled ( )
7388 expect ( mockAppStore . importStore ) . toHaveBeenCalled ( )
7489 } )
7590} )
0 commit comments