@@ -5,6 +5,9 @@ import { getResource } from '../index.js';
55import { ATOMIC_STORE_CONTEXT_KEY , getStoreFromContext } from './store.js' ;
66
77const resource1Subject = 'https://resource1' ;
8+ const resource2Subject = 'https://resource2' ;
9+
10+ const someProp = 'https://some-prop' ;
811
912// We need to mock getContext because normally you can't use it outside of a Svelte component scope.
1013vi . mock ( 'svelte' , ( ) => ( {
@@ -28,7 +31,7 @@ describe('getResource', () => {
2831 [ core . properties . name ] : 'Resource 1' ,
2932 } ,
3033 } ) ;
31- const resource = getResource < DataBrowser . Folder > ( resource1Subject ) ;
34+ const resource = getResource < DataBrowser . Folder > ( ( ) => resource1Subject ) ;
3235
3336 expect ( resource ) . not . toBe ( undefined ) ;
3437 expect ( resource . subject ) . toBe ( resource1Subject ) ;
@@ -47,8 +50,8 @@ describe('getResource', () => {
4750 isA : dataBrowser . classes . folder ,
4851 } ) ;
4952
50- const resource1 = getResource < DataBrowser . Folder > ( resource1Subject ) ;
51- const resource2 = getResource < DataBrowser . Folder > ( resource1Subject ) ;
53+ const resource1 = getResource < DataBrowser . Folder > ( ( ) => resource1Subject ) ;
54+ const resource2 = getResource < DataBrowser . Folder > ( ( ) => resource1Subject ) ;
5255
5356 expect ( resource1 . props . name ) . toBe ( undefined ) ;
5457
@@ -61,4 +64,44 @@ describe('getResource', () => {
6164
6265 cleanup ( ) ;
6366 } ) ;
67+
68+ it ( 'correctly fetches derrived subjects' , async ( ) => {
69+ const cleanup = $effect . root ( ( ) => {
70+ const store = getStoreFromContext ( ) ;
71+ console . log ( store ) ;
72+ store . newResource ( {
73+ subject : resource1Subject ,
74+ isA : dataBrowser . classes . folder ,
75+ propVals : {
76+ [ core . properties . name ] : 'Resource 1' ,
77+ } ,
78+ } ) ;
79+
80+ store . newResource ( {
81+ subject : resource2Subject ,
82+ isA : dataBrowser . classes . folder ,
83+ propVals : {
84+ [ core . properties . name ] : 'Resource 2' ,
85+ } ,
86+ } ) ;
87+
88+ const resource1 = getResource < DataBrowser . Folder > ( ( ) => resource1Subject ) ;
89+ const resource2 = getResource < DataBrowser . Folder > (
90+ ( ) => resource1 . get ( someProp ) as string ,
91+ ) ;
92+
93+ expect ( resource1 . props . name ) . toBe ( 'Resource 1' ) ;
94+ expect ( resource2 . error ) . not . toBe ( undefined ) ;
95+ expect ( resource2 . props . name ) . toBe ( undefined ) ;
96+
97+ resource1 . set ( someProp , resource2Subject ) ;
98+
99+ flushSync ( ) ;
100+
101+ expect ( resource2 . error ) . toBe ( undefined ) ;
102+ expect ( resource2 . props . name ) . toBe ( 'Resource 2' ) ;
103+ } ) ;
104+
105+ cleanup ( ) ;
106+ } ) ;
64107} ) ;
0 commit comments