@@ -19,6 +19,7 @@ import type {
1919 Nullable ,
2020 Reducer ,
2121 ChangeManager ,
22+ Store ,
2223} from "@skipruntime/core" ;
2324import { LoadStatus } from "@skipruntime/core" ;
2425import { Count , Sum } from "@skipruntime/helpers" ;
@@ -1221,6 +1222,40 @@ class WithChanges implements ChangeManager {
12211222 }
12221223}
12231224
1225+ export class MockStore implements Store < string , number > {
1226+ constructor ( private data : Map < string , number [ ] > ) { }
1227+
1228+ load ( ) : Promise < Entry < string , number > [ ] > {
1229+ return Promise . resolve ( Array . from ( this . data . entries ( ) ) ) ;
1230+ }
1231+
1232+ save ( data : Entry < string , number > [ ] ) : Promise < void > {
1233+ if ( data . filter ( ( entry ) => entry [ 0 ] === "error" ) . length > 0 ) {
1234+ return Promise . reject ( new Error ( "Something goes wrong." ) ) ;
1235+ }
1236+ data . forEach ( ( item ) => this . data . set ( item [ 0 ] , item [ 1 ] ) ) ;
1237+ return Promise . resolve ( ) ;
1238+ }
1239+ }
1240+
1241+ function mapWithStoreService ( ) : SkipService < Input_SN , Input_SN > {
1242+ return {
1243+ initialData : {
1244+ input : new MockStore (
1245+ new Map ( [
1246+ [ "v1" , [ 3 ] ] ,
1247+ [ "v2" , [ 5 ] ] ,
1248+ ] ) ,
1249+ ) ,
1250+ } ,
1251+ resources : { map1 : Map1Resource } ,
1252+
1253+ createGraph ( inputCollections : Input_SN ) {
1254+ return inputCollections ;
1255+ } ,
1256+ } ;
1257+ }
1258+
12241259export function initTests (
12251260 category : string ,
12261261 initService : ( service : SkipService ) => Promise < ServiceInstance > ,
@@ -2227,4 +2262,36 @@ INSERT INTO skip_test (id, x) VALUES (1, 1), (2, 2), (3, 3);`);
22272262 ) ;
22282263 }
22292264 } ) ;
2265+
2266+ it ( "testMapWithStore" , async ( ) => {
2267+ const resource = "map1" ;
2268+ const skipservice = mapWithStoreService ( ) ;
2269+ const service = await initService ( skipservice ) ;
2270+ expect ( await service . getAll ( resource ) ) . toEqual ( [
2271+ [ "v1" , [ 5 ] ] ,
2272+ [ "v2" , [ 7 ] ] ,
2273+ ] ) ;
2274+ await service . update ( "input" , [ [ "v3" , [ 10 ] ] ] ) ;
2275+ expect (
2276+ await ( skipservice . initialData ! . input as Store < Json , Json > ) . load ( ) ,
2277+ ) . toEqual ( [
2278+ [ "v1" , [ 3 ] ] ,
2279+ [ "v2" , [ 5 ] ] ,
2280+ [ "v3" , [ 10 ] ] ,
2281+ ] ) ;
2282+ expect ( await service . getArray ( "map1" , "v3" ) ) . toEqual ( [ 12 ] ) ;
2283+ try {
2284+ await service . update ( "input" , [
2285+ [ "error" , [ - 5 ] ] ,
2286+ [ "v3" , [ 50 ] ] ,
2287+ ] ) ;
2288+ throw new Error ( "Error was not thrown" ) ;
2289+ } catch ( e : unknown ) {
2290+ expect ( e ) . toBeA ( Error ) ;
2291+ expect ( ( e as Error ) . message ) . toMatchRegex (
2292+ new RegExp ( / ^ (?: E r r o r : ) ? S o m e t h i n g g o e s w r o n g .$ / ) ,
2293+ ) ;
2294+ }
2295+ await service . close ( ) ;
2296+ } ) ;
22302297}
0 commit comments