@@ -88,6 +88,43 @@ const MOCK_EMPTY_SIGNATURE_FILE = {
8888 format : 'DER' ,
8989} ;
9090
91+ const MOCK_DATABASE_COMPATIBILITY = {
92+ verifiedSnaps : {
93+ [ MOCK_SNAP_ID ] : {
94+ id : MOCK_SNAP_ID ,
95+ metadata : {
96+ name : 'Mock Snap' ,
97+ } ,
98+ versions : {
99+ [ '1.0.0' as SemVerVersion ] : {
100+ checksum : DEFAULT_SNAP_SHASUM ,
101+ clientVersions : {
102+ extension : '>=13.9.0' ,
103+ } ,
104+ } ,
105+ [ '1.1.0' as SemVerVersion ] : {
106+ checksum : DEFAULT_SNAP_SHASUM ,
107+ clientVersions : {
108+ extension : '>=15.0.0' ,
109+ } ,
110+ } ,
111+ } ,
112+ } ,
113+ } ,
114+ blockedSnaps : [ ] ,
115+ } ;
116+
117+ /**
118+ * To regenerate the signature, repeat the instructions above but with MOCK_DATABASE_COMPATIBILITY
119+ */
120+ const MOCK_COMPATIBILITY_SIGNATURE =
121+ '0x3045022100c0dd17483ac052b25a24c43a84de7b7b38194ac770cadb53a83ca950150631bd02204ed1f6b3359901199e2752d148079084cda13439150136055be5d4a3df205115' ;
122+ const MOCK_COMPATIBILITY_SIGNATURE_FILE = {
123+ signature : MOCK_COMPATIBILITY_SIGNATURE ,
124+ curve : 'secp256k1' ,
125+ format : 'DER' ,
126+ } ;
127+
91128describe ( 'JsonSnapsRegistry' , ( ) => {
92129 fetchMock . enableMocks ( ) ;
93130
@@ -244,6 +281,46 @@ describe('JsonSnapsRegistry', () => {
244281 } ) ;
245282 } ) ;
246283
284+ it ( 'returns verified for compatible Snaps' , async ( ) => {
285+ fetchMock
286+ . mockResponseOnce ( JSON . stringify ( MOCK_DATABASE_COMPATIBILITY ) )
287+ . mockResponseOnce ( JSON . stringify ( MOCK_COMPATIBILITY_SIGNATURE_FILE ) ) ;
288+
289+ const { messenger } = getRegistry ( ) ;
290+ const result = await messenger . call ( 'SnapsRegistry:get' , {
291+ [ MOCK_SNAP_ID ] : {
292+ version : '1.0.0' as SemVerVersion ,
293+ checksum : DEFAULT_SNAP_SHASUM ,
294+ } ,
295+ } ) ;
296+
297+ expect ( result ) . toStrictEqual ( {
298+ [ MOCK_SNAP_ID ] : {
299+ status : SnapsRegistryStatus . Verified ,
300+ } ,
301+ } ) ;
302+ } ) ;
303+
304+ it ( 'returns unverified for non compatible Snaps' , async ( ) => {
305+ fetchMock
306+ . mockResponseOnce ( JSON . stringify ( MOCK_DATABASE_COMPATIBILITY ) )
307+ . mockResponseOnce ( JSON . stringify ( MOCK_COMPATIBILITY_SIGNATURE_FILE ) ) ;
308+
309+ const { messenger } = getRegistry ( ) ;
310+ const result = await messenger . call ( 'SnapsRegistry:get' , {
311+ [ MOCK_SNAP_ID ] : {
312+ version : '1.1.0' as SemVerVersion ,
313+ checksum : DEFAULT_SNAP_SHASUM ,
314+ } ,
315+ } ) ;
316+
317+ expect ( result ) . toStrictEqual ( {
318+ [ MOCK_SNAP_ID ] : {
319+ status : SnapsRegistryStatus . Unverified ,
320+ } ,
321+ } ) ;
322+ } ) ;
323+
247324 it ( 'uses existing state if registry is unavailable' , async ( ) => {
248325 fetchMock . mockResponse ( '' , { status : 404 } ) ;
249326
@@ -378,39 +455,8 @@ describe('JsonSnapsRegistry', () => {
378455
379456 it ( 'resolves to a compatible allowlisted version' , async ( ) => {
380457 fetchMock
381- . mockResponseOnce (
382- JSON . stringify ( {
383- verifiedSnaps : {
384- [ MOCK_SNAP_ID ] : {
385- id : MOCK_SNAP_ID ,
386- metadata : {
387- name : 'Mock Snap' ,
388- } ,
389- versions : {
390- [ '1.0.0' as SemVerVersion ] : {
391- checksum : DEFAULT_SNAP_SHASUM ,
392- clientVersions : {
393- extension : '>=13.9.0' ,
394- } ,
395- } ,
396- [ '1.1.0' as SemVerVersion ] : {
397- checksum : DEFAULT_SNAP_SHASUM ,
398- clientVersions : {
399- extension : '>=15.0.0' ,
400- } ,
401- } ,
402- } ,
403- } ,
404- } ,
405- } ) ,
406- )
407- . mockResponseOnce (
408- JSON . stringify ( {
409- ...MOCK_SIGNATURE_FILE ,
410- signature :
411- '0x30440220337683880fa580d8eed89c37f9b6d5639a015d416d58afc50ff0602820ab8af3022008b6a5b37a028d8d632fb311ddd0e92fc2d98cff013da4e47b99a754638a8876' ,
412- } ) ,
413- ) ;
458+ . mockResponseOnce ( JSON . stringify ( MOCK_DATABASE_COMPATIBILITY ) )
459+ . mockResponseOnce ( JSON . stringify ( MOCK_COMPATIBILITY_SIGNATURE_FILE ) ) ;
414460
415461 const { messenger } = getRegistry ( ) ;
416462 const result = await messenger . call (
0 commit comments