Skip to content

Commit ac1db77

Browse files
committed
Add test for reactivity to svelte lib
1 parent 53908f4 commit ac1db77

File tree

1 file changed

+46
-3
lines changed

1 file changed

+46
-3
lines changed

browser/svelte/src/lib/stores/getResource.svelte.test.ts

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import { getResource } from '../index.js';
55
import { ATOMIC_STORE_CONTEXT_KEY, getStoreFromContext } from './store.js';
66

77
const 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.
1013
vi.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

Comments
 (0)