@sphereon/ssi-sdk.data-store 0.23.5-unstable.88 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +77 -77
  3. package/dist/index.d.ts +3 -9
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +2 -15
  6. package/dist/index.js.map +1 -1
  7. package/dist/migrations/generic/index.d.ts +0 -2
  8. package/dist/migrations/generic/index.d.ts.map +1 -1
  9. package/dist/migrations/generic/index.js +1 -4
  10. package/dist/migrations/generic/index.js.map +1 -1
  11. package/dist/migrations/index.d.ts +1 -1
  12. package/dist/migrations/index.d.ts.map +1 -1
  13. package/dist/migrations/index.js +1 -2
  14. package/dist/migrations/index.js.map +1 -1
  15. package/dist/migrations/postgres/1690925872592-CreateContacts.js +1 -1
  16. package/dist/migrations/postgres/1690925872592-CreateContacts.js.map +1 -1
  17. package/dist/migrations/postgres/1708525189001-CreateDigitalCredential.js +22 -22
  18. package/dist/migrations/postgres/1708797018115-CreateMachineStateStore.js +16 -16
  19. package/dist/migrations/sqlite/1708525189002-CreateDigitalCredential.js +21 -21
  20. package/dist/migrations/sqlite/1708796002272-CreateMachineStateStore.js +15 -15
  21. package/dist/types/index.d.ts +0 -2
  22. package/dist/types/index.d.ts.map +1 -1
  23. package/dist/types/index.js +0 -2
  24. package/dist/types/index.js.map +1 -1
  25. package/package.json +4 -5
  26. package/src/__tests__/contact.entities.test.ts +2542 -2542
  27. package/src/__tests__/contact.store.test.ts +2471 -2471
  28. package/src/__tests__/digitalCredential.entities.test.ts +254 -254
  29. package/src/__tests__/digitalCredential.store.test.ts +294 -294
  30. package/src/__tests__/eventLogger.entities.test.ts +73 -73
  31. package/src/__tests__/eventLogger.store.test.ts +136 -136
  32. package/src/__tests__/issuanceBranding.entities.test.ts +844 -844
  33. package/src/__tests__/issuanceBranding.store.test.ts +1884 -1884
  34. package/src/__tests__/machineState.entities.test.ts +51 -51
  35. package/src/__tests__/machineState.store.test.ts +174 -174
  36. package/src/contact/AbstractContactStore.ts +71 -71
  37. package/src/contact/ContactStore.ts +723 -723
  38. package/src/digitalCredential/AbstractDigitalCredentialStore.ts +17 -17
  39. package/src/digitalCredential/DigitalCredentialStore.ts +127 -127
  40. package/src/entities/contact/BaseContactEntity.ts +39 -39
  41. package/src/entities/contact/ConnectionEntity.ts +29 -29
  42. package/src/entities/contact/CorrelationIdentifierEntity.ts +37 -37
  43. package/src/entities/contact/DidAuthConfigEntity.ts +14 -14
  44. package/src/entities/contact/ElectronicAddressEntity.ts +63 -63
  45. package/src/entities/contact/IdentityEntity.ts +97 -97
  46. package/src/entities/contact/IdentityMetadataItemEntity.ts +35 -35
  47. package/src/entities/contact/NaturalPersonEntity.ts +38 -38
  48. package/src/entities/contact/OpenIdConfigEntity.ts +26 -26
  49. package/src/entities/contact/OrganizationEntity.ts +34 -34
  50. package/src/entities/contact/PartyEntity.ts +110 -110
  51. package/src/entities/contact/PartyRelationshipEntity.ts +61 -61
  52. package/src/entities/contact/PartyTypeEntity.ts +62 -62
  53. package/src/entities/contact/PhysicalAddressEntity.ts +87 -87
  54. package/src/entities/digitalCredential/DigitalCredentialEntity.ts +64 -64
  55. package/src/entities/eventLogger/AuditEventEntity.ts +99 -99
  56. package/src/entities/issuanceBranding/CredentialBrandingEntity.ts +78 -78
  57. package/src/entities/issuanceBranding/ImageAttributesEntity.ts +57 -57
  58. package/src/entities/issuanceBranding/IssuerBrandingEntity.ts +72 -72
  59. package/src/entities/machineState/MachineStateInfoEntity.ts +58 -58
  60. package/src/entities/statusList2021/StatusList2021Entity.ts +96 -96
  61. package/src/eventLogger/AbstractEventLoggerStore.ts +7 -7
  62. package/src/eventLogger/EventLoggerStore.ts +62 -62
  63. package/src/index.ts +141 -154
  64. package/src/issuanceBranding/IssuanceBrandingStore.ts +559 -559
  65. package/src/machineState/IAbstractMachineStateStore.ts +65 -65
  66. package/src/machineState/MachineStateStore.ts +149 -149
  67. package/src/migrations/generic/1-CreateContacts.ts +66 -66
  68. package/src/migrations/generic/2-CreateIssuanceBranding.ts +64 -64
  69. package/src/migrations/generic/3-CreateContacts.ts +66 -66
  70. package/src/migrations/generic/4-CreateStatusList.ts +54 -54
  71. package/src/migrations/generic/5-CreateAuditEvents.ts +66 -66
  72. package/src/migrations/generic/6-CreateDigitalCredential.ts +66 -66
  73. package/src/migrations/generic/7-CreateMachineStateStore.ts +66 -66
  74. package/src/migrations/generic/index.ts +33 -36
  75. package/src/migrations/index.ts +9 -10
  76. package/src/migrations/postgres/1659463079428-CreateContacts.ts +63 -63
  77. package/src/migrations/postgres/1685628974232-CreateIssuanceBranding.ts +85 -85
  78. package/src/migrations/postgres/1690925872592-CreateContacts.ts +104 -104
  79. package/src/migrations/postgres/1693866470001-CreateStatusList.ts +24 -24
  80. package/src/migrations/postgres/1701634812183-CreateAuditEvents.ts +33 -33
  81. package/src/migrations/postgres/1708525189001-CreateDigitalCredential.ts +44 -44
  82. package/src/migrations/postgres/1708797018115-CreateMachineStateStore.ts +29 -29
  83. package/src/migrations/sqlite/1659463069549-CreateContacts.ts +110 -110
  84. package/src/migrations/sqlite/1685628973231-CreateIssuanceBranding.ts +119 -119
  85. package/src/migrations/sqlite/1690925872693-CreateContacts.ts +161 -161
  86. package/src/migrations/sqlite/1693866470000-CreateStatusList.ts +24 -24
  87. package/src/migrations/sqlite/1701634819487-CreateAuditEvents.ts +15 -15
  88. package/src/migrations/sqlite/1708525189002-CreateDigitalCredential.ts +34 -34
  89. package/src/migrations/sqlite/1708796002272-CreateMachineStateStore.ts +28 -28
  90. package/src/statusList/StatusListStore.ts +237 -237
  91. package/src/types/contact/IAbstractContactStore.ts +161 -161
  92. package/src/types/contact/contact.ts +237 -237
  93. package/src/types/digitalCredential/IAbstractDigitalCredentialStore.ts +37 -37
  94. package/src/types/digitalCredential/digitalCredential.ts +46 -46
  95. package/src/types/eventLogger/IAbstractEventLoggerStore.ts +12 -12
  96. package/src/types/eventLogger/eventLogger.ts +3 -3
  97. package/src/types/index.ts +10 -12
  98. package/src/types/machineState/IAbstractMachineStateStore.ts +68 -68
  99. package/src/utils/SortingUtils.ts +16 -16
  100. package/src/utils/contact/MappingUtils.ts +385 -385
  101. package/src/utils/digitalCredential/MappingUtils.ts +122 -122
  102. package/dist/entities/presentationDefinitions/PresentationDefinitionItemEntity.d.ts +0 -13
  103. package/dist/entities/presentationDefinitions/PresentationDefinitionItemEntity.d.ts.map +0 -1
  104. package/dist/entities/presentationDefinitions/PresentationDefinitionItemEntity.js +0 -71
  105. package/dist/entities/presentationDefinitions/PresentationDefinitionItemEntity.js.map +0 -1
  106. package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts +0 -7
  107. package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts.map +0 -1
  108. package/dist/migrations/generic/8-CreatePresentationDefinitions.js +0 -78
  109. package/dist/migrations/generic/8-CreatePresentationDefinitions.js.map +0 -1
  110. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.d.ts +0 -7
  111. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.d.ts.map +0 -1
  112. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js +0 -40
  113. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js.map +0 -1
  114. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.d.ts +0 -7
  115. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.d.ts.map +0 -1
  116. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js +0 -37
  117. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js.map +0 -1
  118. package/dist/pd/AbstractPDStore.d.ts +0 -10
  119. package/dist/pd/AbstractPDStore.d.ts.map +0 -1
  120. package/dist/pd/AbstractPDStore.js +0 -7
  121. package/dist/pd/AbstractPDStore.js.map +0 -1
  122. package/dist/pd/PDStore.d.ts +0 -14
  123. package/dist/pd/PDStore.d.ts.map +0 -1
  124. package/dist/pd/PDStore.js +0 -90
  125. package/dist/pd/PDStore.js.map +0 -1
  126. package/dist/types/pd/IAbstractPDStore.d.ts +0 -14
  127. package/dist/types/pd/IAbstractPDStore.d.ts.map +0 -1
  128. package/dist/types/pd/IAbstractPDStore.js +0 -3
  129. package/dist/types/pd/IAbstractPDStore.js.map +0 -1
  130. package/dist/types/pd/pd.d.ts +0 -15
  131. package/dist/types/pd/pd.d.ts.map +0 -1
  132. package/dist/types/pd/pd.js +0 -3
  133. package/dist/types/pd/pd.js.map +0 -1
  134. package/dist/utils/presentationDefinitions/MappingUtils.d.ts +0 -6
  135. package/dist/utils/presentationDefinitions/MappingUtils.d.ts.map +0 -1
  136. package/dist/utils/presentationDefinitions/MappingUtils.js +0 -50
  137. package/dist/utils/presentationDefinitions/MappingUtils.js.map +0 -1
  138. package/src/entities/presentationDefinitions/PresentationDefinitionItemEntity.ts +0 -41
  139. package/src/migrations/generic/8-CreatePresentationDefinitions.ts +0 -66
  140. package/src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts +0 -24
  141. package/src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts +0 -23
  142. package/src/pd/AbstractPDStore.ts +0 -10
  143. package/src/pd/PDStore.ts +0 -103
  144. package/src/types/pd/IAbstractPDStore.ts +0 -19
  145. package/src/types/pd/pd.ts +0 -16
  146. package/src/utils/presentationDefinitions/MappingUtils.ts +0 -54
@@ -1,1884 +1,1884 @@
1
- import { DataSource } from 'typeorm'
2
- import { IssuanceBrandingStore } from '../issuanceBranding/IssuanceBrandingStore'
3
- import { DataStoreMigrations } from '../migrations'
4
- import {
5
- BackgroundAttributesEntity,
6
- CredentialLocaleBrandingEntity,
7
- DataStoreIssuanceBrandingEntities,
8
- IAddCredentialLocaleBrandingArgs,
9
- IAddIssuerLocaleBrandingArgs,
10
- IBasicCredentialBranding,
11
- IBasicCredentialLocaleBranding,
12
- IBasicIssuerBranding,
13
- IBasicIssuerLocaleBranding,
14
- ICredentialBranding,
15
- ICredentialLocaleBranding,
16
- IGetCredentialLocaleBrandingArgs,
17
- IGetIssuerLocaleBrandingArgs,
18
- IIssuerBranding,
19
- IIssuerLocaleBranding,
20
- ILocaleBranding,
21
- ImageAttributesEntity,
22
- ImageDimensionsEntity,
23
- IssuerLocaleBrandingEntity,
24
- IUpdateCredentialLocaleBrandingArgs,
25
- IUpdateIssuerLocaleBrandingArgs,
26
- TextAttributesEntity,
27
- } from '../index'
28
-
29
- describe('Issuance branding store tests', (): void => {
30
- let dbConnection: DataSource
31
- let issuanceBrandingStore: IssuanceBrandingStore
32
-
33
- beforeEach(async (): Promise<void> => {
34
- dbConnection = await new DataSource({
35
- type: 'sqlite',
36
- database: ':memory:',
37
- //logging: ['info'],
38
- migrationsRun: false,
39
- migrations: DataStoreMigrations,
40
- synchronize: false,
41
- entities: DataStoreIssuanceBrandingEntities,
42
- }).initialize()
43
- await dbConnection.runMigrations()
44
- expect(await dbConnection.showMigrations()).toBeFalsy()
45
- issuanceBrandingStore = new IssuanceBrandingStore(dbConnection)
46
- })
47
-
48
- afterEach(async (): Promise<void> => {
49
- await (await dbConnection).destroy()
50
- })
51
-
52
- // Credential tests
53
-
54
- it('should add credential branding', async (): Promise<void> => {
55
- const credentialBranding: IBasicCredentialBranding = {
56
- issuerCorrelationId: 'issuerCorrelationId',
57
- vcHash: 'vcHash',
58
- localeBranding: [
59
- {
60
- alias: 'credentialTypeAlias',
61
- locale: 'en-US',
62
- },
63
- {
64
- alias: 'credentialTypeAlias',
65
- locale: 'en-GB',
66
- },
67
- ],
68
- }
69
-
70
- const result: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
71
-
72
- expect(result).toBeDefined()
73
- expect(result?.issuerCorrelationId).toEqual(credentialBranding.issuerCorrelationId)
74
- expect(result?.vcHash).toEqual(credentialBranding.vcHash)
75
- expect(result?.localeBranding.length).toEqual(2)
76
- })
77
-
78
- it('should throw error when adding credential branding with duplicate vc hash', async (): Promise<void> => {
79
- const credentialBranding1: IBasicCredentialBranding = {
80
- issuerCorrelationId: 'issuerCorrelationId',
81
- vcHash: 'vcHash',
82
- localeBranding: [
83
- {
84
- alias: 'credentialTypeAlias',
85
- locale: 'en-US',
86
- },
87
- ],
88
- }
89
-
90
- const result: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
91
- expect(result).toBeDefined()
92
-
93
- const credentialBranding2: IBasicCredentialBranding = {
94
- issuerCorrelationId: 'issuerCorrelationId',
95
- vcHash: 'vcHash',
96
- localeBranding: [
97
- {
98
- alias: 'credentialTypeAlias',
99
- locale: 'en-US',
100
- },
101
- ],
102
- }
103
-
104
- await expect(issuanceBrandingStore.addCredentialBranding(credentialBranding2)).rejects.toThrowError(
105
- `Credential branding already present for vc with hash: ${credentialBranding2.vcHash}`,
106
- )
107
- })
108
-
109
- it('should throw error when adding credential branding with duplicates locales', async (): Promise<void> => {
110
- const credentialBranding1: IBasicCredentialBranding = {
111
- issuerCorrelationId: 'issuerCorrelationId',
112
- vcHash: 'vcHash',
113
- localeBranding: [
114
- {
115
- alias: 'credentialTypeAlias',
116
- locale: 'en-US',
117
- },
118
- {
119
- alias: 'credentialTypeAlias',
120
- locale: 'en-US',
121
- },
122
- ],
123
- }
124
-
125
- await expect(issuanceBrandingStore.addCredentialBranding(credentialBranding1)).rejects.toThrowError(
126
- 'Credential branding contains duplicate locales',
127
- )
128
-
129
- const credentialBranding2: IBasicCredentialBranding = {
130
- issuerCorrelationId: 'issuerCorrelationId',
131
- vcHash: 'vcHash',
132
- localeBranding: [
133
- {
134
- alias: 'credentialTypeAlias',
135
- },
136
- {
137
- alias: 'credentialTypeAlias',
138
- },
139
- ],
140
- }
141
-
142
- await expect(issuanceBrandingStore.addCredentialBranding(credentialBranding2)).rejects.toThrowError(
143
- 'Credential branding contains duplicate locales',
144
- )
145
- })
146
-
147
- it('should get all credential branding', async (): Promise<void> => {
148
- const credentialBranding1: IBasicCredentialBranding = {
149
- issuerCorrelationId: 'issuerCorrelationId',
150
- vcHash: 'vcHash1',
151
- localeBranding: [
152
- {
153
- alias: 'credentialTypeAlias',
154
- locale: 'en-US',
155
- },
156
- ],
157
- }
158
-
159
- const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
160
- expect(savedCredentialBranding1).toBeDefined()
161
-
162
- const credentialBranding2: IBasicCredentialBranding = {
163
- issuerCorrelationId: 'issuerCorrelationId',
164
- vcHash: 'vcHash2',
165
- localeBranding: [
166
- {
167
- alias: 'credentialTypeAlias',
168
- locale: 'en-US',
169
- },
170
- ],
171
- }
172
-
173
- const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
174
- expect(savedCredentialBranding2).toBeDefined()
175
-
176
- const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding()
177
-
178
- expect(result.length).toEqual(2)
179
- })
180
-
181
- it('should get all credential branding for a certain locale', async (): Promise<void> => {
182
- const credentialBranding1: IBasicCredentialBranding = {
183
- issuerCorrelationId: 'issuerCorrelationId',
184
- vcHash: 'vcHash1',
185
- localeBranding: [
186
- {
187
- alias: 'credentialTypeAlias',
188
- locale: 'en-US',
189
- },
190
- {
191
- alias: 'credentialTypeAlias',
192
- locale: 'en-GB',
193
- },
194
- ],
195
- }
196
-
197
- const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
198
- expect(savedCredentialBranding1).toBeDefined()
199
-
200
- const credentialBranding2: IBasicCredentialBranding = {
201
- issuerCorrelationId: 'issuerCorrelationId',
202
- vcHash: 'vcHash2',
203
- localeBranding: [
204
- {
205
- alias: 'credentialTypeAlias',
206
- locale: 'en-US',
207
- },
208
- ],
209
- }
210
-
211
- const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
212
- expect(savedCredentialBranding2).toBeDefined()
213
-
214
- const args = {
215
- filter: [
216
- {
217
- localeBranding: {
218
- locale: 'en-US',
219
- },
220
- },
221
- ],
222
- }
223
-
224
- const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
225
-
226
- expect(result.length).toEqual(2)
227
- })
228
-
229
- it('should get credential branding with a certain locale', async (): Promise<void> => {
230
- const credentialBranding1: IBasicCredentialBranding = {
231
- issuerCorrelationId: 'issuerCorrelationId',
232
- vcHash: 'vcHash1',
233
- localeBranding: [
234
- {
235
- alias: 'credentialTypeAlias',
236
- locale: 'en-US',
237
- },
238
- {
239
- alias: 'credentialTypeAlias',
240
- locale: 'en-GB',
241
- },
242
- ],
243
- }
244
-
245
- const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
246
- expect(savedCredentialBranding1).toBeDefined()
247
-
248
- const credentialBranding2: IBasicCredentialBranding = {
249
- issuerCorrelationId: 'issuerCorrelationId',
250
- vcHash: 'vcHash2',
251
- localeBranding: [
252
- {
253
- alias: 'credentialTypeAlias',
254
- locale: 'en-US',
255
- },
256
- ],
257
- }
258
-
259
- const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
260
- expect(savedCredentialBranding2).toBeDefined()
261
-
262
- const args = {
263
- filter: [
264
- {
265
- vcHash: 'vcHash1',
266
- localeBranding: {
267
- locale: 'en-US',
268
- },
269
- },
270
- ],
271
- }
272
-
273
- const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
274
-
275
- expect(result.length).toEqual(1)
276
- })
277
-
278
- it('should get all credential branding with no locale', async (): Promise<void> => {
279
- const credentialBranding1: IBasicCredentialBranding = {
280
- issuerCorrelationId: 'issuerCorrelationId',
281
- vcHash: 'vcHash1',
282
- localeBranding: [
283
- {
284
- alias: 'credentialTypeAlias',
285
- locale: 'en-US',
286
- },
287
- {
288
- alias: 'credentialTypeAlias',
289
- },
290
- ],
291
- }
292
-
293
- const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
294
- expect(savedCredentialBranding1).toBeDefined()
295
-
296
- const credentialBranding2: IBasicCredentialBranding = {
297
- issuerCorrelationId: 'issuerCorrelationId',
298
- vcHash: 'vcHash2',
299
- localeBranding: [
300
- {
301
- alias: 'credentialTypeAlias',
302
- locale: 'en-US',
303
- },
304
- ],
305
- }
306
-
307
- const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
308
- expect(savedCredentialBranding2).toBeDefined()
309
-
310
- const args = {
311
- filter: [
312
- {
313
- localeBranding: {
314
- locale: undefined,
315
- },
316
- },
317
- ],
318
- }
319
-
320
- const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
321
-
322
- expect(result.length).toEqual(1)
323
- })
324
-
325
- it('should get all credential locale branding with no locale', async (): Promise<void> => {
326
- const credentialBranding1: IBasicCredentialBranding = {
327
- issuerCorrelationId: 'issuerCorrelationId',
328
- vcHash: 'vcHash1',
329
- localeBranding: [
330
- {
331
- alias: 'credentialTypeAlias',
332
- locale: 'en-US',
333
- },
334
- {
335
- alias: 'credentialTypeAlias',
336
- },
337
- ],
338
- }
339
-
340
- const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
341
- expect(savedCredentialBranding1).toBeDefined()
342
-
343
- const credentialBranding2: IBasicCredentialBranding = {
344
- issuerCorrelationId: 'issuerCorrelationId',
345
- vcHash: 'vcHash2',
346
- localeBranding: [
347
- {
348
- alias: 'credentialTypeAlias',
349
- locale: 'en-US',
350
- },
351
- ],
352
- }
353
-
354
- const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
355
- expect(savedCredentialBranding2).toBeDefined()
356
-
357
- const args = {
358
- filter: [
359
- {
360
- locale: undefined,
361
- },
362
- ],
363
- }
364
-
365
- const result: Array<ICredentialLocaleBranding> = await issuanceBrandingStore.getCredentialLocaleBranding(args)
366
-
367
- expect(result.length).toEqual(1)
368
- })
369
-
370
- it('should get all credential branding for multiple locales', async (): Promise<void> => {
371
- const credentialBranding1: IBasicCredentialBranding = {
372
- issuerCorrelationId: 'issuerCorrelationId',
373
- vcHash: 'vcHash1',
374
- localeBranding: [
375
- {
376
- alias: 'credentialTypeAlias',
377
- locale: 'en-GB',
378
- },
379
- ],
380
- }
381
-
382
- const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
383
- expect(savedCredentialBranding1).toBeDefined()
384
-
385
- const credentialBranding2: IBasicCredentialBranding = {
386
- issuerCorrelationId: 'issuerCorrelationId',
387
- vcHash: 'vcHash2',
388
- localeBranding: [
389
- {
390
- alias: 'credentialTypeAlias',
391
- locale: 'en-US',
392
- },
393
- ],
394
- }
395
-
396
- const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
397
- expect(savedCredentialBranding2).toBeDefined()
398
-
399
- const args = {
400
- filter: [
401
- {
402
- localeBranding: {
403
- locale: 'en-US',
404
- },
405
- },
406
- {
407
- localeBranding: {
408
- locale: 'en-GB',
409
- },
410
- },
411
- ],
412
- }
413
-
414
- const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
415
-
416
- expect(result.length).toEqual(2)
417
- })
418
-
419
- it('should return no credential branding with not matching filter', async (): Promise<void> => {
420
- const credentialBranding: IBasicCredentialBranding = {
421
- issuerCorrelationId: 'issuerCorrelationId',
422
- vcHash: 'vcHash',
423
- localeBranding: [
424
- {
425
- alias: 'credentialTypeAlias',
426
- locale: 'en-GB',
427
- },
428
- ],
429
- }
430
-
431
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
432
- expect(savedCredentialBranding).toBeDefined()
433
-
434
- const args = {
435
- filter: [
436
- {
437
- localeBranding: {
438
- locale: 'en-US',
439
- },
440
- },
441
- ],
442
- }
443
-
444
- const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
445
-
446
- expect(result.length).toEqual(0)
447
- })
448
-
449
- it('should update credential branding', async (): Promise<void> => {
450
- const credentialBranding: IBasicCredentialBranding = {
451
- issuerCorrelationId: 'issuerCorrelationId',
452
- vcHash: 'vcHash',
453
- localeBranding: [
454
- {
455
- alias: 'credentialTypeAlias',
456
- locale: 'en-US',
457
- },
458
- ],
459
- }
460
-
461
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
462
- expect(savedCredentialBranding).toBeDefined()
463
-
464
- const updatedCredentialBranding = {
465
- id: savedCredentialBranding.id,
466
- issuerCorrelationId: 'newIssuerCorrelationId',
467
- vcHash: 'newVcHash',
468
- }
469
- const result: ICredentialBranding = await issuanceBrandingStore.updateCredentialBranding({ credentialBranding: updatedCredentialBranding })
470
-
471
- expect(result).toBeDefined()
472
- expect(result?.localeBranding?.length).toEqual(1)
473
- expect(result?.vcHash).toEqual(updatedCredentialBranding.vcHash)
474
- expect(result?.issuerCorrelationId).toEqual(updatedCredentialBranding.issuerCorrelationId)
475
- })
476
-
477
- it('should throw error when updating credential branding with unknown id', async (): Promise<void> => {
478
- const credentialBranding = {
479
- id: 'unknownId',
480
- issuerCorrelationId: 'newIssuerCorrelationId',
481
- vcHash: 'newVcHash',
482
- }
483
-
484
- await expect(issuanceBrandingStore.updateCredentialBranding({ credentialBranding })).rejects.toThrowError(
485
- `No credential branding found for id: ${credentialBranding.id}`,
486
- )
487
- })
488
-
489
- it('should remove credential branding and all children', async (): Promise<void> => {
490
- const credentialBranding: IBasicCredentialBranding = {
491
- issuerCorrelationId: 'issuerCorrelationId',
492
- vcHash: 'vcHash',
493
- localeBranding: [
494
- {
495
- alias: 'credentialTypeAlias',
496
- locale: 'en-US',
497
- logo: {
498
- uri: 'data:image/jpeg;base64,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',
499
- mediaType: 'image/jpeg',
500
- alt: 'Sphereon logo',
501
- dimensions: {
502
- width: 200,
503
- height: 200,
504
- },
505
- },
506
- description: 'Sphereon credential branding',
507
- background: {
508
- color: '#7C1010',
509
- image: {
510
- uri: 'data:image/png;base64,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',
511
- alt: 'Sphereon background',
512
- mediaType: 'image/png',
513
- dimensions: {
514
- width: 262,
515
- height: 116,
516
- },
517
- },
518
- },
519
- text: {
520
- color: '#000000',
521
- },
522
- },
523
- ],
524
- }
525
-
526
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
527
- expect(savedCredentialBranding).toBeDefined()
528
- const branding: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding()
529
- expect(branding.length).toEqual(1)
530
-
531
- await issuanceBrandingStore.removeCredentialBranding({ filter: [{ id: savedCredentialBranding.id }] })
532
-
533
- // check background image dimensions
534
- expect(
535
- await dbConnection.getRepository(ImageDimensionsEntity).findOne({
536
- where: { id: savedCredentialBranding?.localeBranding[0]?.background?.image?.dimensions?.id },
537
- }),
538
- ).toBeNull()
539
-
540
- // check background image
541
- expect(
542
- await dbConnection.getRepository(ImageAttributesEntity).findOne({
543
- where: { id: savedCredentialBranding?.localeBranding[0]?.background?.image?.id },
544
- }),
545
- ).toBeNull()
546
-
547
- // check background
548
- expect(
549
- await dbConnection.getRepository(BackgroundAttributesEntity).findOne({
550
- where: { id: savedCredentialBranding?.localeBranding[0]?.background?.id },
551
- }),
552
- ).toBeNull()
553
-
554
- // check logo dimensions
555
- expect(
556
- await dbConnection.getRepository(ImageDimensionsEntity).findOne({
557
- where: { id: savedCredentialBranding?.localeBranding[0]?.logo?.dimensions?.id },
558
- }),
559
- ).toBeNull()
560
-
561
- // check logo
562
- expect(
563
- await dbConnection.getRepository(ImageAttributesEntity).findOne({
564
- where: { id: savedCredentialBranding?.localeBranding[0]?.logo?.id },
565
- }),
566
- ).toBeNull()
567
-
568
- // check text
569
- expect(
570
- await dbConnection.getRepository(TextAttributesEntity).findOne({
571
- where: { id: savedCredentialBranding?.localeBranding[0]?.text?.id },
572
- }),
573
- ).toBeNull()
574
-
575
- // check credential locale branding
576
- expect(
577
- await dbConnection.getRepository(CredentialLocaleBrandingEntity).findOne({
578
- where: { id: savedCredentialBranding?.localeBranding[0]?.id },
579
- }),
580
- ).toBeNull()
581
-
582
- const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding()
583
-
584
- expect(result.length).toEqual(0)
585
- })
586
-
587
- it('should add credential locale branding', async (): Promise<void> => {
588
- const credentialBranding: IBasicCredentialBranding = {
589
- issuerCorrelationId: 'issuerCorrelationId',
590
- vcHash: 'vcHash',
591
- localeBranding: [
592
- {
593
- alias: 'credentialTypeAlias',
594
- locale: 'en-US',
595
- },
596
- ],
597
- }
598
-
599
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
600
- expect(savedCredentialBranding).toBeDefined()
601
-
602
- const addCredentialLocaleBrandingArgs: IAddCredentialLocaleBrandingArgs = {
603
- credentialBrandingId: savedCredentialBranding.id,
604
- localeBranding: [
605
- {
606
- alias: 'credentialTypeAlias',
607
- locale: 'en-GB',
608
- },
609
- ],
610
- }
611
-
612
- const result: ICredentialBranding = await issuanceBrandingStore.addCredentialLocaleBranding(addCredentialLocaleBrandingArgs)
613
-
614
- expect(result.localeBranding.length).toEqual(2)
615
- })
616
-
617
- it('should throw error when adding credential locale branding with unknown id', async (): Promise<void> => {
618
- const addCredentialLocaleBrandingArgs: IAddCredentialLocaleBrandingArgs = {
619
- credentialBrandingId: 'unknownId',
620
- localeBranding: [
621
- {
622
- alias: 'credentialTypeAlias',
623
- locale: 'en-GB',
624
- },
625
- ],
626
- }
627
-
628
- await expect(issuanceBrandingStore.addCredentialLocaleBranding(addCredentialLocaleBrandingArgs)).rejects.toThrowError(
629
- `No credential branding found for id: ${addCredentialLocaleBrandingArgs.credentialBrandingId}`,
630
- )
631
- })
632
-
633
- it('should throw error when adding duplicate credential locale branding', async (): Promise<void> => {
634
- const credentialBranding: IBasicCredentialBranding = {
635
- issuerCorrelationId: 'issuerCorrelationId',
636
- vcHash: 'vcHash',
637
- localeBranding: [
638
- {
639
- alias: 'credentialTypeAlias',
640
- locale: 'en-US',
641
- },
642
- {
643
- alias: 'credentialTypeAlias',
644
- locale: 'en-GB',
645
- },
646
- ],
647
- }
648
-
649
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
650
- expect(savedCredentialBranding).toBeDefined()
651
-
652
- const addCredentialLocaleBrandingArgs: IAddCredentialLocaleBrandingArgs = {
653
- credentialBrandingId: savedCredentialBranding.id,
654
- localeBranding: [
655
- {
656
- alias: 'credentialTypeAlias',
657
- locale: 'en-GB',
658
- },
659
- {
660
- alias: 'credentialTypeAlias',
661
- locale: 'en-US',
662
- },
663
- ],
664
- }
665
-
666
- await expect(issuanceBrandingStore.addCredentialLocaleBranding(addCredentialLocaleBrandingArgs)).rejects.toThrowError(
667
- `Credential branding already contains locales: ${addCredentialLocaleBrandingArgs.localeBranding.map(
668
- (localeBranding: IBasicCredentialLocaleBranding) => localeBranding.locale,
669
- )}`,
670
- )
671
- })
672
-
673
- it('should get all credential locale branding for a credential branding', async (): Promise<void> => {
674
- const credentialBranding: IBasicCredentialBranding = {
675
- issuerCorrelationId: 'credentialCorrelationId',
676
- vcHash: 'vcHash',
677
- localeBranding: [
678
- {
679
- alias: 'credentialTypeAlias',
680
- locale: 'en-US',
681
- },
682
- {
683
- alias: 'credentialTypeAlias',
684
- locale: 'en-GB',
685
- },
686
- ],
687
- }
688
-
689
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
690
- expect(savedCredentialBranding).toBeDefined()
691
-
692
- const result: Array<ICredentialLocaleBranding> = await issuanceBrandingStore.getCredentialLocaleBranding()
693
-
694
- expect(result.length).toEqual(2)
695
- })
696
-
697
- it('should get credential locale branding for a credential branding', async (): Promise<void> => {
698
- const credentialBranding: IBasicCredentialBranding = {
699
- issuerCorrelationId: 'credentialCorrelationId',
700
- vcHash: 'vcHash',
701
- localeBranding: [
702
- {
703
- alias: 'blabla',
704
- locale: 'en-US',
705
- },
706
- {
707
- alias: 'credentialTypeAlias2',
708
- locale: 'en-GB',
709
- },
710
- ],
711
- }
712
-
713
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
714
- expect(savedCredentialBranding).toBeDefined()
715
-
716
- const getCredentialLocaleBrandingArgs: IGetCredentialLocaleBrandingArgs = {
717
- filter: [
718
- {
719
- credentialBranding: {
720
- id: savedCredentialBranding.id,
721
- },
722
- locale: 'en-US',
723
- },
724
- ],
725
- }
726
-
727
- const result: Array<ICredentialLocaleBranding> = await issuanceBrandingStore.getCredentialLocaleBranding(getCredentialLocaleBrandingArgs)
728
-
729
- expect(result.length).toEqual(1)
730
- })
731
-
732
- it('should update credential locale branding', async (): Promise<void> => {
733
- const credentialBranding: IBasicCredentialBranding = {
734
- issuerCorrelationId: 'credentialCorrelationId',
735
- vcHash: 'vcHash',
736
- localeBranding: [
737
- {
738
- alias: 'credentialTypeAlias',
739
- locale: 'en-US',
740
- },
741
- {
742
- alias: 'credentialTypeAlias',
743
- locale: 'en-GB',
744
- },
745
- ],
746
- }
747
-
748
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
749
- expect(savedCredentialBranding).toBeDefined()
750
-
751
- const updateCredentialLocaleBrandingArgs: IUpdateCredentialLocaleBrandingArgs = {
752
- localeBranding: {
753
- id: savedCredentialBranding.localeBranding[0].id,
754
- alias: savedCredentialBranding.localeBranding[0].alias,
755
- locale: 'en-NL',
756
- },
757
- }
758
-
759
- const result: ICredentialLocaleBranding = await issuanceBrandingStore.updateCredentialLocaleBranding(updateCredentialLocaleBrandingArgs)
760
-
761
- expect(result).toBeDefined()
762
- })
763
-
764
- it('should throw error when updating credential branding with duplicate locale', async (): Promise<void> => {
765
- const credentialBranding: IBasicCredentialBranding = {
766
- issuerCorrelationId: 'credentialCorrelationId',
767
- vcHash: 'vcHash',
768
- localeBranding: [
769
- {
770
- alias: 'credentialTypeAlias',
771
- locale: 'en-US',
772
- },
773
- {
774
- alias: 'credentialTypeAlias',
775
- locale: 'en-GB',
776
- },
777
- ],
778
- }
779
-
780
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
781
- expect(savedCredentialBranding).toBeDefined()
782
-
783
- const locale = 'en-GB'
784
- const updateCredentialLocaleBrandingArgs: IUpdateCredentialLocaleBrandingArgs = {
785
- localeBranding: {
786
- id: savedCredentialBranding.localeBranding[0].id,
787
- alias: savedCredentialBranding.localeBranding[0].alias,
788
- locale,
789
- },
790
- }
791
-
792
- await expect(issuanceBrandingStore.updateCredentialLocaleBranding(updateCredentialLocaleBrandingArgs)).rejects.toThrowError(
793
- `Credential branding: ${savedCredentialBranding.id} already contains locale: ${locale}`,
794
- )
795
- })
796
-
797
- it('should remove credential locale branding and all children', async (): Promise<void> => {
798
- const credentialBranding: IBasicCredentialBranding = {
799
- issuerCorrelationId: 'issuerCorrelationId',
800
- vcHash: 'vcHash',
801
- localeBranding: [
802
- {
803
- alias: 'credentialTypeAlias',
804
- locale: 'en-US',
805
- logo: {
806
- uri: 'data:image/jpeg;base64,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',
807
- mediaType: 'image/jpeg',
808
- alt: 'Sphereon logo',
809
- dimensions: {
810
- width: 200,
811
- height: 200,
812
- },
813
- },
814
- description: 'Sphereon credential branding',
815
- background: {
816
- color: '#7C1010',
817
- image: {
818
- uri: 'data:image/png;base64,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',
819
- alt: 'Sphereon background',
820
- mediaType: 'image/png',
821
- dimensions: {
822
- width: 262,
823
- height: 116,
824
- },
825
- },
826
- },
827
- text: {
828
- color: '#000000',
829
- },
830
- },
831
- ],
832
- }
833
-
834
- const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
835
- expect(savedCredentialBranding).toBeDefined()
836
- const branding: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding()
837
- expect(branding.length).toEqual(1)
838
-
839
- await issuanceBrandingStore.removeCredentialLocaleBranding({ filter: [{ id: savedCredentialBranding.localeBranding[0].id }] })
840
-
841
- // check background image dimensions
842
- expect(
843
- await dbConnection.getRepository(ImageDimensionsEntity).findOne({
844
- where: { id: savedCredentialBranding?.localeBranding[0]?.background?.image?.dimensions?.id },
845
- }),
846
- ).toBeNull()
847
-
848
- // check background image
849
- expect(
850
- await dbConnection.getRepository(ImageAttributesEntity).findOne({
851
- where: { id: savedCredentialBranding?.localeBranding[0]?.background?.image?.id },
852
- }),
853
- ).toBeNull()
854
-
855
- // check background
856
- expect(
857
- await dbConnection.getRepository(BackgroundAttributesEntity).findOne({
858
- where: { id: savedCredentialBranding?.localeBranding[0]?.background?.id },
859
- }),
860
- ).toBeNull()
861
-
862
- // check logo dimensions
863
- expect(
864
- await dbConnection.getRepository(ImageDimensionsEntity).findOne({
865
- where: { id: savedCredentialBranding?.localeBranding[0]?.logo?.dimensions?.id },
866
- }),
867
- ).toBeNull()
868
-
869
- // check logo
870
- expect(
871
- await dbConnection.getRepository(ImageAttributesEntity).findOne({
872
- where: { id: savedCredentialBranding?.localeBranding[0]?.logo?.id },
873
- }),
874
- ).toBeNull()
875
-
876
- // check text
877
- expect(
878
- await dbConnection.getRepository(TextAttributesEntity).findOne({
879
- where: { id: savedCredentialBranding?.localeBranding[0]?.text?.id },
880
- }),
881
- ).toBeNull()
882
-
883
- // check credential locale branding
884
- expect(
885
- await dbConnection.getRepository(CredentialLocaleBrandingEntity).findOne({
886
- where: { id: savedCredentialBranding?.localeBranding[0]?.id },
887
- }),
888
- ).toBeNull()
889
-
890
- const result: Array<ICredentialLocaleBranding> = await issuanceBrandingStore.getCredentialLocaleBranding()
891
-
892
- expect(result.length).toEqual(0)
893
- })
894
-
895
- it('should show no locale in response when adding credential branding with no locale', async (): Promise<void> => {
896
- const credentialBranding: IBasicCredentialBranding = {
897
- issuerCorrelationId: 'issuerCorrelationId',
898
- vcHash: 'vcHash',
899
- localeBranding: [
900
- {
901
- alias: 'credentialTypeAlias',
902
- },
903
- ],
904
- }
905
-
906
- const result: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
907
-
908
- expect(result).toBeDefined()
909
- expect(result?.localeBranding.length).toEqual(1)
910
- expect(result?.localeBranding[0].locale).toBeUndefined()
911
- })
912
-
913
- it('should show no locale in response when adding credential locale branding with no locale', async (): Promise<void> => {
914
- const credentialBranding: IBasicCredentialBranding = {
915
- issuerCorrelationId: 'issuerCorrelationId',
916
- vcHash: 'vcHash',
917
- localeBranding: [
918
- {
919
- alias: 'credentialTypeAlias',
920
- locale: 'en-US',
921
- },
922
- ],
923
- }
924
-
925
- const fromDb: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
926
- expect(fromDb).toBeDefined()
927
-
928
- const credentialLocaleBranding: IBasicCredentialLocaleBranding = {
929
- alias: 'credentialTypeAlias',
930
- }
931
-
932
- const result: ICredentialBranding = await issuanceBrandingStore.addCredentialLocaleBranding({
933
- credentialBrandingId: fromDb.id,
934
- localeBranding: [credentialLocaleBranding],
935
- })
936
-
937
- expect(result).toBeDefined()
938
- expect(result?.localeBranding.length).toEqual(2)
939
- expect(result?.localeBranding.filter((localeBranding: ICredentialLocaleBranding) => localeBranding.locale === undefined).length).toEqual(1)
940
- })
941
-
942
- it('should store blank strings as undefined when adding credential locale branding', async (): Promise<void> => {
943
- const credentialBranding: IBasicCredentialBranding = {
944
- issuerCorrelationId: 'issuerCorrelationId',
945
- vcHash: 'vcHash',
946
- localeBranding: [
947
- {
948
- alias: '',
949
- locale: '',
950
- logo: {
951
- uri: '',
952
- dataUri: '',
953
- mediaType: '',
954
- alt: '',
955
- },
956
- description: '',
957
- background: {
958
- color: '',
959
- image: {
960
- uri: '',
961
- mediaType: '',
962
- dataUri: '',
963
- alt: '',
964
- },
965
- },
966
- text: {
967
- color: '',
968
- },
969
- },
970
- ],
971
- }
972
-
973
- const result: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
974
-
975
- expect(result).toBeDefined()
976
- expect(result?.localeBranding.length).toEqual(1)
977
- expect(result?.localeBranding[0].locale).toBeUndefined()
978
- expect(result?.localeBranding[0].alias).toBeUndefined()
979
- expect(result?.localeBranding[0].logo!.uri).toBeUndefined()
980
- expect(result?.localeBranding[0].logo!.dataUri).toBeUndefined()
981
- expect(result?.localeBranding[0].logo!.mediaType).toBeUndefined()
982
- expect(result?.localeBranding[0].logo!.alt).toBeUndefined()
983
- expect(result?.localeBranding[0].description).toBeUndefined()
984
- expect(result?.localeBranding[0].background!.image!.uri).toBeUndefined()
985
- expect(result?.localeBranding[0].background!.image!.dataUri).toBeUndefined()
986
- expect(result?.localeBranding[0].background!.image!.mediaType).toBeUndefined()
987
- expect(result?.localeBranding[0].background!.image!.alt).toBeUndefined()
988
- expect(result?.localeBranding[0].text!.color).toBeUndefined()
989
- })
990
-
991
- // Issuer tests
992
-
993
- it('should add issuer branding', async (): Promise<void> => {
994
- const issuerBranding: IBasicIssuerBranding = {
995
- issuerCorrelationId: 'issuerCorrelationId',
996
- localeBranding: [
997
- {
998
- alias: 'issuerAlias',
999
- locale: 'en-US',
1000
- },
1001
- {
1002
- alias: 'issuerAlias',
1003
- locale: 'en-GB',
1004
- },
1005
- ],
1006
- }
1007
-
1008
- const result: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1009
-
1010
- expect(result).toBeDefined()
1011
- expect(result?.issuerCorrelationId).toEqual(issuerBranding.issuerCorrelationId)
1012
- expect(result?.localeBranding.length).toEqual(2)
1013
- })
1014
-
1015
- it('should throw error when adding issuer branding with duplicate issuer correlation id', async (): Promise<void> => {
1016
- const issuerBranding1: IBasicIssuerBranding = {
1017
- issuerCorrelationId: 'issuerCorrelationId',
1018
- localeBranding: [
1019
- {
1020
- alias: 'issuerAlias',
1021
- locale: 'en-US',
1022
- },
1023
- ],
1024
- }
1025
-
1026
- const result: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1027
- expect(result).toBeDefined()
1028
-
1029
- const issuerBranding2: IBasicIssuerBranding = {
1030
- issuerCorrelationId: 'issuerCorrelationId',
1031
- localeBranding: [
1032
- {
1033
- alias: 'issuerAlias',
1034
- locale: 'en-US',
1035
- },
1036
- ],
1037
- }
1038
-
1039
- await expect(issuanceBrandingStore.addIssuerBranding(issuerBranding2)).rejects.toThrowError(
1040
- `Issuer branding already present for issuer with correlation id: ${issuerBranding2.issuerCorrelationId}`,
1041
- )
1042
- })
1043
-
1044
- it('should throw error when adding issuer branding with duplicates locales', async (): Promise<void> => {
1045
- const issuerBranding1: IBasicIssuerBranding = {
1046
- issuerCorrelationId: 'issuerCorrelationId',
1047
- localeBranding: [
1048
- {
1049
- alias: 'issuerAlias',
1050
- locale: 'en-US',
1051
- },
1052
- {
1053
- alias: 'issuerAlias',
1054
- locale: 'en-US',
1055
- },
1056
- ],
1057
- }
1058
-
1059
- await expect(issuanceBrandingStore.addIssuerBranding(issuerBranding1)).rejects.toThrowError('Issuer branding contains duplicate locales')
1060
-
1061
- const issuerBranding2: IBasicIssuerBranding = {
1062
- issuerCorrelationId: 'issuerCorrelationId',
1063
- localeBranding: [
1064
- {
1065
- alias: 'issuerAlias',
1066
- },
1067
- {
1068
- alias: 'issuerAlias',
1069
- },
1070
- ],
1071
- }
1072
-
1073
- await expect(issuanceBrandingStore.addIssuerBranding(issuerBranding2)).rejects.toThrowError('Issuer branding contains duplicate locales')
1074
- })
1075
-
1076
- it('should get all issuer branding', async (): Promise<void> => {
1077
- const issuerBranding1: IBasicIssuerBranding = {
1078
- issuerCorrelationId: 'issuerCorrelationId1',
1079
- localeBranding: [
1080
- {
1081
- alias: 'issuerAlias',
1082
- locale: 'en-US',
1083
- },
1084
- ],
1085
- }
1086
-
1087
- const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1088
- expect(savedIssuerBranding1).toBeDefined()
1089
-
1090
- const issuerBranding2: IBasicIssuerBranding = {
1091
- issuerCorrelationId: 'issuerCorrelationId2',
1092
- localeBranding: [
1093
- {
1094
- alias: 'issuerAlias',
1095
- locale: 'en-US',
1096
- },
1097
- ],
1098
- }
1099
-
1100
- const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1101
- expect(savedIssuerBranding2).toBeDefined()
1102
-
1103
- const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding()
1104
-
1105
- expect(result.length).toEqual(2)
1106
- })
1107
-
1108
- it('should get all issuer branding for a certain locale', async (): Promise<void> => {
1109
- const issuerBranding1: IBasicIssuerBranding = {
1110
- issuerCorrelationId: 'issuerCorrelationId1',
1111
- localeBranding: [
1112
- {
1113
- alias: 'issuerAlias',
1114
- locale: 'en-US',
1115
- },
1116
- {
1117
- alias: 'issuerAlias',
1118
- locale: 'en-GB',
1119
- },
1120
- ],
1121
- }
1122
-
1123
- const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1124
- expect(savedIssuerBranding1).toBeDefined()
1125
-
1126
- const issuerBranding2: IBasicIssuerBranding = {
1127
- issuerCorrelationId: 'issuerCorrelationId2',
1128
- localeBranding: [
1129
- {
1130
- alias: 'issuerAlias',
1131
- locale: 'en-US',
1132
- },
1133
- ],
1134
- }
1135
-
1136
- const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1137
- expect(savedIssuerBranding2).toBeDefined()
1138
-
1139
- const args = {
1140
- filter: [
1141
- {
1142
- localeBranding: {
1143
- locale: 'en-US',
1144
- },
1145
- },
1146
- ],
1147
- }
1148
-
1149
- const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1150
-
1151
- expect(result.length).toEqual(2)
1152
- })
1153
-
1154
- it('should get issuer branding with a certain locale', async (): Promise<void> => {
1155
- const issuerBranding1: IBasicIssuerBranding = {
1156
- issuerCorrelationId: 'issuerCorrelationId1',
1157
- localeBranding: [
1158
- {
1159
- alias: 'issuerAlias',
1160
- locale: 'en-US',
1161
- },
1162
- {
1163
- alias: 'issuerAlias',
1164
- locale: 'en-GB',
1165
- },
1166
- ],
1167
- }
1168
-
1169
- const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1170
- expect(savedIssuerBranding1).toBeDefined()
1171
-
1172
- const issuerBranding2: IBasicIssuerBranding = {
1173
- issuerCorrelationId: 'issuerCorrelationId2',
1174
- localeBranding: [
1175
- {
1176
- alias: 'issuerAlias',
1177
- locale: 'en-US',
1178
- },
1179
- ],
1180
- }
1181
-
1182
- const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1183
- expect(savedIssuerBranding2).toBeDefined()
1184
-
1185
- const args = {
1186
- filter: [
1187
- {
1188
- issuerCorrelationId: 'issuerCorrelationId1',
1189
- localeBranding: {
1190
- locale: 'en-US',
1191
- },
1192
- },
1193
- ],
1194
- }
1195
-
1196
- const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1197
-
1198
- expect(result.length).toEqual(1)
1199
- })
1200
-
1201
- it('should get all issuer branding with no locale', async (): Promise<void> => {
1202
- const issuerBranding1: IBasicIssuerBranding = {
1203
- issuerCorrelationId: 'issuerCorrelationId1',
1204
- localeBranding: [
1205
- {
1206
- alias: 'issuerAlias',
1207
- locale: 'en-US',
1208
- },
1209
- {
1210
- alias: 'issuerAlias',
1211
- },
1212
- ],
1213
- }
1214
-
1215
- const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1216
- expect(savedIssuerBranding1).toBeDefined()
1217
-
1218
- const issuerBranding2: IBasicIssuerBranding = {
1219
- issuerCorrelationId: 'issuerCorrelationId2',
1220
- localeBranding: [
1221
- {
1222
- alias: 'issuerAlias',
1223
- locale: 'en-US',
1224
- },
1225
- ],
1226
- }
1227
-
1228
- const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1229
- expect(savedIssuerBranding2).toBeDefined()
1230
-
1231
- const args = {
1232
- filter: [
1233
- {
1234
- localeBranding: {
1235
- locale: undefined,
1236
- },
1237
- },
1238
- ],
1239
- }
1240
-
1241
- const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1242
-
1243
- expect(result.length).toEqual(1)
1244
- })
1245
-
1246
- it('should get all issuer locale branding with no locale', async (): Promise<void> => {
1247
- const issuerBranding1: IBasicIssuerBranding = {
1248
- issuerCorrelationId: 'issuerCorrelationId1',
1249
- localeBranding: [
1250
- {
1251
- alias: 'issuerAlias',
1252
- locale: 'en-US',
1253
- },
1254
- {
1255
- alias: 'issuerAlias',
1256
- },
1257
- ],
1258
- }
1259
-
1260
- const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1261
- expect(savedIssuerBranding1).toBeDefined()
1262
-
1263
- const issuerBranding2: IBasicIssuerBranding = {
1264
- issuerCorrelationId: 'issuerCorrelationId2',
1265
- localeBranding: [
1266
- {
1267
- alias: 'issuerAlias',
1268
- locale: 'en-US',
1269
- },
1270
- ],
1271
- }
1272
-
1273
- const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1274
- expect(savedIssuerBranding2).toBeDefined()
1275
-
1276
- const args = {
1277
- filter: [
1278
- {
1279
- locale: undefined,
1280
- },
1281
- ],
1282
- }
1283
-
1284
- const result: Array<IIssuerLocaleBranding> = await issuanceBrandingStore.getIssuerLocaleBranding(args)
1285
-
1286
- expect(result.length).toEqual(1)
1287
- })
1288
-
1289
- it('should get all issuer branding for multiple locales', async (): Promise<void> => {
1290
- const issuerBranding1: IBasicIssuerBranding = {
1291
- issuerCorrelationId: 'issuerCorrelationId1',
1292
- localeBranding: [
1293
- {
1294
- alias: 'issuerAlias',
1295
- locale: 'en-GB',
1296
- },
1297
- ],
1298
- }
1299
-
1300
- const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1301
- expect(savedIssuerBranding1).toBeDefined()
1302
-
1303
- const credentialBranding2: IBasicIssuerBranding = {
1304
- issuerCorrelationId: 'issuerCorrelationId2',
1305
- localeBranding: [
1306
- {
1307
- alias: 'issuerAlias',
1308
- locale: 'en-US',
1309
- },
1310
- ],
1311
- }
1312
-
1313
- const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(credentialBranding2)
1314
- expect(savedIssuerBranding2).toBeDefined()
1315
-
1316
- const args = {
1317
- filter: [
1318
- {
1319
- localeBranding: {
1320
- locale: 'en-US',
1321
- },
1322
- },
1323
- {
1324
- localeBranding: {
1325
- locale: 'en-GB',
1326
- },
1327
- },
1328
- ],
1329
- }
1330
-
1331
- const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1332
-
1333
- expect(result.length).toEqual(2)
1334
- })
1335
-
1336
- it('should return no issuer branding with not matching filter', async (): Promise<void> => {
1337
- const issuerBranding: IBasicIssuerBranding = {
1338
- issuerCorrelationId: 'issuerCorrelationId',
1339
- localeBranding: [
1340
- {
1341
- alias: 'issuerAlias',
1342
- locale: 'en-GB',
1343
- },
1344
- ],
1345
- }
1346
-
1347
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1348
- expect(savedIssuerBranding).toBeDefined()
1349
-
1350
- const args = {
1351
- filter: [
1352
- {
1353
- localeBranding: {
1354
- locale: 'en-US',
1355
- },
1356
- },
1357
- ],
1358
- }
1359
-
1360
- const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1361
-
1362
- expect(result.length).toEqual(0)
1363
- })
1364
-
1365
- it('should update issuer branding', async (): Promise<void> => {
1366
- const issuerBranding: IBasicIssuerBranding = {
1367
- issuerCorrelationId: 'issuerCorrelationId',
1368
- localeBranding: [
1369
- {
1370
- alias: 'issuerAlias',
1371
- locale: 'en-US',
1372
- },
1373
- ],
1374
- }
1375
-
1376
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1377
- expect(savedIssuerBranding).toBeDefined()
1378
-
1379
- const updatedIssuerBranding = {
1380
- id: savedIssuerBranding.id,
1381
- issuerCorrelationId: 'newIssuerCorrelationId',
1382
- }
1383
- const result: IIssuerBranding = await issuanceBrandingStore.updateIssuerBranding({ issuerBranding: updatedIssuerBranding })
1384
-
1385
- expect(result).toBeDefined()
1386
- expect(result?.localeBranding?.length).toEqual(1)
1387
- expect(result?.issuerCorrelationId).toEqual(updatedIssuerBranding.issuerCorrelationId)
1388
- })
1389
-
1390
- it('should throw error when updating issuer branding with unknown id', async (): Promise<void> => {
1391
- const issuerBranding = {
1392
- id: 'unknownId',
1393
- issuerCorrelationId: 'newIssuerCorrelationId',
1394
- vcHash: 'newVcHash',
1395
- }
1396
-
1397
- await expect(issuanceBrandingStore.updateIssuerBranding({ issuerBranding })).rejects.toThrowError(
1398
- `No issuer branding found for id: ${issuerBranding.id}`,
1399
- )
1400
- })
1401
-
1402
- it('should remove issuer branding and all children', async (): Promise<void> => {
1403
- const issuerBranding: IBasicIssuerBranding = {
1404
- issuerCorrelationId: 'issuerCorrelationId',
1405
- localeBranding: [
1406
- {
1407
- alias: 'issuerAlias',
1408
- locale: 'en-US',
1409
- logo: {
1410
- uri: 'data:image/jpeg;base64,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',
1411
- mediaType: 'image/jpeg',
1412
- alt: 'Sphereon logo',
1413
- dimensions: {
1414
- width: 200,
1415
- height: 200,
1416
- },
1417
- },
1418
- description: 'Sphereon credential branding',
1419
- background: {
1420
- color: '#7C1010',
1421
- image: {
1422
- uri: 'data:image/png;base64,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',
1423
- alt: 'Sphereon background',
1424
- mediaType: 'image/png',
1425
- dimensions: {
1426
- width: 262,
1427
- height: 116,
1428
- },
1429
- },
1430
- },
1431
- text: {
1432
- color: '#000000',
1433
- },
1434
- },
1435
- ],
1436
- }
1437
-
1438
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1439
- expect(savedIssuerBranding).toBeDefined()
1440
- const branding: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding()
1441
- expect(branding.length).toEqual(1)
1442
-
1443
- await issuanceBrandingStore.removeIssuerBranding({ filter: [{ id: savedIssuerBranding.id }] })
1444
-
1445
- // check background image dimensions
1446
- expect(
1447
- await dbConnection.getRepository(ImageDimensionsEntity).findOne({
1448
- where: { id: savedIssuerBranding?.localeBranding[0]?.background?.image?.dimensions?.id },
1449
- }),
1450
- ).toBeNull()
1451
-
1452
- // check background image
1453
- expect(
1454
- await dbConnection.getRepository(ImageAttributesEntity).findOne({
1455
- where: { id: savedIssuerBranding?.localeBranding[0]?.background?.image?.id },
1456
- }),
1457
- ).toBeNull()
1458
-
1459
- // check background
1460
- expect(
1461
- await dbConnection.getRepository(BackgroundAttributesEntity).findOne({
1462
- where: { id: savedIssuerBranding?.localeBranding[0]?.background?.id },
1463
- }),
1464
- ).toBeNull()
1465
-
1466
- // check logo dimensions
1467
- expect(
1468
- await dbConnection.getRepository(ImageDimensionsEntity).findOne({
1469
- where: { id: savedIssuerBranding?.localeBranding[0]?.logo?.dimensions?.id },
1470
- }),
1471
- ).toBeNull()
1472
-
1473
- // check logo
1474
- expect(
1475
- await dbConnection.getRepository(ImageAttributesEntity).findOne({
1476
- where: { id: savedIssuerBranding?.localeBranding[0]?.logo?.id },
1477
- }),
1478
- ).toBeNull()
1479
-
1480
- // check text
1481
- expect(
1482
- await dbConnection.getRepository(TextAttributesEntity).findOne({
1483
- where: { id: savedIssuerBranding?.localeBranding[0]?.text?.id },
1484
- }),
1485
- ).toBeNull()
1486
-
1487
- // check issuer locale branding
1488
- expect(
1489
- await dbConnection.getRepository(IssuerLocaleBrandingEntity).findOne({
1490
- where: { id: savedIssuerBranding?.localeBranding[0]?.id },
1491
- }),
1492
- ).toBeNull()
1493
- })
1494
-
1495
- it('should add issuer locale branding', async (): Promise<void> => {
1496
- const issuerBranding: IBasicIssuerBranding = {
1497
- issuerCorrelationId: 'issuerCorrelationId',
1498
- localeBranding: [
1499
- {
1500
- alias: 'issuerAlias',
1501
- locale: 'en-US',
1502
- },
1503
- ],
1504
- }
1505
-
1506
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1507
- expect(savedIssuerBranding).toBeDefined()
1508
-
1509
- const addIssuerLocaleBrandingArgs: IAddIssuerLocaleBrandingArgs = {
1510
- issuerBrandingId: savedIssuerBranding.id,
1511
- localeBranding: [
1512
- {
1513
- alias: 'issuerAlias',
1514
- locale: 'en-GB',
1515
- },
1516
- ],
1517
- }
1518
-
1519
- const result: IIssuerBranding = await issuanceBrandingStore.addIssuerLocaleBranding(addIssuerLocaleBrandingArgs)
1520
-
1521
- expect(result.localeBranding.length).toEqual(2)
1522
- })
1523
-
1524
- it('should throw error when adding issuer locale branding with unknown id', async (): Promise<void> => {
1525
- const addIssuerLocaleBrandingArgs: IAddIssuerLocaleBrandingArgs = {
1526
- issuerBrandingId: 'unknownId',
1527
- localeBranding: [
1528
- {
1529
- alias: 'issuerAlias',
1530
- locale: 'en-GB',
1531
- },
1532
- ],
1533
- }
1534
-
1535
- await expect(issuanceBrandingStore.addIssuerLocaleBranding(addIssuerLocaleBrandingArgs)).rejects.toThrowError(
1536
- `No issuer branding found for id: ${addIssuerLocaleBrandingArgs.issuerBrandingId}`,
1537
- )
1538
- })
1539
-
1540
- it('should throw error when adding duplicate issuer locale branding', async (): Promise<void> => {
1541
- const issuerBranding: IBasicIssuerBranding = {
1542
- issuerCorrelationId: 'issuerCorrelationId',
1543
- localeBranding: [
1544
- {
1545
- alias: 'issuerAlias',
1546
- locale: 'en-US',
1547
- },
1548
- {
1549
- alias: 'issuerAlias',
1550
- locale: 'en-GB',
1551
- },
1552
- ],
1553
- }
1554
-
1555
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1556
- expect(savedIssuerBranding).toBeDefined()
1557
-
1558
- const addIssuerLocaleBrandingArgs: IAddIssuerLocaleBrandingArgs = {
1559
- issuerBrandingId: savedIssuerBranding.id,
1560
- localeBranding: [
1561
- {
1562
- alias: 'issuerAlias',
1563
- locale: 'en-GB',
1564
- },
1565
- {
1566
- alias: 'issuerAlias',
1567
- locale: 'en-US',
1568
- },
1569
- ],
1570
- }
1571
-
1572
- await expect(issuanceBrandingStore.addIssuerLocaleBranding(addIssuerLocaleBrandingArgs)).rejects.toThrowError(
1573
- `Issuer branding already contains locales: ${addIssuerLocaleBrandingArgs.localeBranding.map(
1574
- (localeBranding: IBasicIssuerLocaleBranding) => localeBranding.locale,
1575
- )}`,
1576
- )
1577
- })
1578
-
1579
- it('should get all issuer locale branding for a credential branding', async (): Promise<void> => {
1580
- const issuerBranding: IBasicIssuerBranding = {
1581
- issuerCorrelationId: 'issuerCorrelationId',
1582
- localeBranding: [
1583
- {
1584
- alias: 'issuerAlias',
1585
- locale: 'en-US',
1586
- },
1587
- {
1588
- alias: 'issuerAlias',
1589
- locale: 'en-GB',
1590
- },
1591
- ],
1592
- }
1593
-
1594
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1595
- expect(savedIssuerBranding).toBeDefined()
1596
-
1597
- const result: Array<ILocaleBranding> = await issuanceBrandingStore.getIssuerLocaleBranding()
1598
-
1599
- expect(result.length).toEqual(2)
1600
- })
1601
-
1602
- it('should get issuer locale branding for a issuer branding', async (): Promise<void> => {
1603
- const issuerBranding: IBasicIssuerBranding = {
1604
- issuerCorrelationId: 'credentialCorrelationId',
1605
- localeBranding: [
1606
- {
1607
- alias: 'issuerAlias',
1608
- locale: 'en-US',
1609
- },
1610
- {
1611
- alias: 'issuerAlias',
1612
- locale: 'en-GB',
1613
- },
1614
- ],
1615
- }
1616
-
1617
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1618
- expect(savedIssuerBranding).toBeDefined()
1619
-
1620
- const getIssuerLocaleBrandingArgs: IGetIssuerLocaleBrandingArgs = {
1621
- filter: [
1622
- {
1623
- issuerBranding: {
1624
- id: savedIssuerBranding.id,
1625
- },
1626
- locale: 'en-US',
1627
- },
1628
- ],
1629
- }
1630
-
1631
- const result: Array<IIssuerLocaleBranding> = await issuanceBrandingStore.getIssuerLocaleBranding(getIssuerLocaleBrandingArgs)
1632
-
1633
- expect(result.length).toEqual(1)
1634
- })
1635
-
1636
- it('should update issuer locale branding', async (): Promise<void> => {
1637
- const issuerBranding: IBasicIssuerBranding = {
1638
- issuerCorrelationId: 'issuerCorrelationId',
1639
- localeBranding: [
1640
- {
1641
- alias: 'issuerAlias',
1642
- locale: 'en-US',
1643
- },
1644
- {
1645
- alias: 'issuerAlias',
1646
- locale: 'en-GB',
1647
- },
1648
- ],
1649
- }
1650
-
1651
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1652
- expect(savedIssuerBranding).toBeDefined()
1653
-
1654
- const updateIssuerLocaleBrandingArgs: IUpdateIssuerLocaleBrandingArgs = {
1655
- localeBranding: {
1656
- id: savedIssuerBranding.localeBranding[0].id,
1657
- alias: savedIssuerBranding.localeBranding[0].alias,
1658
- locale: 'en-NL',
1659
- },
1660
- }
1661
-
1662
- const result: IIssuerLocaleBranding = await issuanceBrandingStore.updateIssuerLocaleBranding(updateIssuerLocaleBrandingArgs)
1663
-
1664
- expect(result).toBeDefined()
1665
- })
1666
-
1667
- it('should throw error when updating issuer branding with duplicate locale', async (): Promise<void> => {
1668
- const issuerBranding: IBasicIssuerBranding = {
1669
- issuerCorrelationId: 'issuerCorrelationId',
1670
- localeBranding: [
1671
- {
1672
- alias: 'issuerAlias',
1673
- locale: 'en-US',
1674
- },
1675
- {
1676
- alias: 'issuerAlias',
1677
- locale: 'en-GB',
1678
- },
1679
- ],
1680
- }
1681
-
1682
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1683
- expect(savedIssuerBranding).toBeDefined()
1684
-
1685
- const locale = 'en-GB'
1686
- const updateIssuerLocaleBrandingArgs: IUpdateIssuerLocaleBrandingArgs = {
1687
- localeBranding: {
1688
- id: savedIssuerBranding.localeBranding[0].id,
1689
- alias: savedIssuerBranding.localeBranding[0].alias,
1690
- locale,
1691
- },
1692
- }
1693
-
1694
- await expect(issuanceBrandingStore.updateIssuerLocaleBranding(updateIssuerLocaleBrandingArgs)).rejects.toThrowError(
1695
- `Issuer branding: ${savedIssuerBranding.id} already contains locale: ${locale}`,
1696
- )
1697
- })
1698
-
1699
- it('should remove issuer locale branding and all children', async (): Promise<void> => {
1700
- const issuerBranding: IBasicIssuerBranding = {
1701
- issuerCorrelationId: 'issuerCorrelationId',
1702
- localeBranding: [
1703
- {
1704
- alias: 'issuerAlias',
1705
- locale: 'en-US',
1706
- logo: {
1707
- uri: 'data:image/jpeg;base64,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',
1708
- mediaType: 'image/jpeg',
1709
- alt: 'Sphereon logo',
1710
- dimensions: {
1711
- width: 200,
1712
- height: 200,
1713
- },
1714
- },
1715
- description: 'Sphereon credential branding',
1716
- background: {
1717
- color: '#7C1010',
1718
- image: {
1719
- uri: 'data:image/png;base64,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',
1720
- alt: 'Sphereon background',
1721
- mediaType: 'image/png',
1722
- dimensions: {
1723
- width: 262,
1724
- height: 116,
1725
- },
1726
- },
1727
- },
1728
- text: {
1729
- color: '#000000',
1730
- },
1731
- },
1732
- ],
1733
- }
1734
-
1735
- const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1736
- expect(savedIssuerBranding).toBeDefined()
1737
- const branding: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding()
1738
- expect(branding.length).toEqual(1)
1739
-
1740
- await issuanceBrandingStore.removeIssuerLocaleBranding({ filter: [{ id: savedIssuerBranding.localeBranding[0].id }] })
1741
-
1742
- // check background image dimensions
1743
- expect(
1744
- await dbConnection.getRepository(ImageDimensionsEntity).findOne({
1745
- where: { id: savedIssuerBranding?.localeBranding[0]?.background?.image?.dimensions?.id },
1746
- }),
1747
- ).toBeNull()
1748
-
1749
- // check background image
1750
- expect(
1751
- await dbConnection.getRepository(ImageAttributesEntity).findOne({
1752
- where: { id: savedIssuerBranding?.localeBranding[0]?.background?.image?.id },
1753
- }),
1754
- ).toBeNull()
1755
-
1756
- // check background
1757
- expect(
1758
- await dbConnection.getRepository(BackgroundAttributesEntity).findOne({
1759
- where: { id: savedIssuerBranding?.localeBranding[0]?.background?.id },
1760
- }),
1761
- ).toBeNull()
1762
-
1763
- // check logo dimensions
1764
- expect(
1765
- await dbConnection.getRepository(ImageDimensionsEntity).findOne({
1766
- where: { id: savedIssuerBranding?.localeBranding[0]?.logo?.dimensions?.id },
1767
- }),
1768
- ).toBeNull()
1769
-
1770
- // check logo
1771
- expect(
1772
- await dbConnection.getRepository(ImageAttributesEntity).findOne({
1773
- where: { id: savedIssuerBranding?.localeBranding[0]?.logo?.id },
1774
- }),
1775
- ).toBeNull()
1776
-
1777
- // check text
1778
- expect(
1779
- await dbConnection.getRepository(TextAttributesEntity).findOne({
1780
- where: { id: savedIssuerBranding?.localeBranding[0]?.text?.id },
1781
- }),
1782
- ).toBeNull()
1783
-
1784
- // check issuer locale branding
1785
- expect(
1786
- await dbConnection.getRepository(IssuerLocaleBrandingEntity).findOne({
1787
- where: { id: savedIssuerBranding?.localeBranding[0]?.id },
1788
- }),
1789
- ).toBeNull()
1790
- })
1791
-
1792
- it('should show no locale in response when adding issuer branding with no locale', async (): Promise<void> => {
1793
- const issuerBranding: IBasicIssuerBranding = {
1794
- issuerCorrelationId: 'issuerCorrelationId',
1795
- localeBranding: [
1796
- {
1797
- alias: 'issuerAlias',
1798
- },
1799
- ],
1800
- }
1801
-
1802
- const result: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1803
-
1804
- expect(result).toBeDefined()
1805
- expect(result?.localeBranding.length).toEqual(1)
1806
- expect(result?.localeBranding[0].locale).toBeUndefined()
1807
- })
1808
-
1809
- it('should show no locale in response when adding issuer locale branding with no locale', async (): Promise<void> => {
1810
- const issuerBranding: IBasicIssuerBranding = {
1811
- issuerCorrelationId: 'issuerCorrelationId',
1812
- localeBranding: [
1813
- {
1814
- alias: 'issuerAlias',
1815
- locale: 'en-US',
1816
- },
1817
- ],
1818
- }
1819
-
1820
- const fromDb: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1821
- expect(fromDb).toBeDefined()
1822
-
1823
- const issuerLocaleBranding: IBasicIssuerLocaleBranding = {
1824
- alias: 'issuerAlias',
1825
- }
1826
-
1827
- const result: IIssuerBranding = await issuanceBrandingStore.addIssuerLocaleBranding({
1828
- issuerBrandingId: fromDb.id,
1829
- localeBranding: [issuerLocaleBranding],
1830
- })
1831
-
1832
- expect(result).toBeDefined()
1833
- expect(result?.localeBranding.length).toEqual(2)
1834
- expect(result?.localeBranding.filter((localeBranding: ICredentialLocaleBranding) => localeBranding.locale === undefined).length).toEqual(1)
1835
- })
1836
-
1837
- it('should store blank strings as undefined when adding issuer locale branding', async (): Promise<void> => {
1838
- const issuerBranding: IBasicIssuerBranding = {
1839
- issuerCorrelationId: 'issuerCorrelationId',
1840
- localeBranding: [
1841
- {
1842
- alias: '',
1843
- locale: '',
1844
- logo: {
1845
- uri: '',
1846
- dataUri: '',
1847
- mediaType: '',
1848
- alt: '',
1849
- },
1850
- description: '',
1851
- background: {
1852
- color: '',
1853
- image: {
1854
- uri: '',
1855
- mediaType: '',
1856
- dataUri: '',
1857
- alt: '',
1858
- },
1859
- },
1860
- text: {
1861
- color: '',
1862
- },
1863
- },
1864
- ],
1865
- }
1866
-
1867
- const result: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1868
-
1869
- expect(result).toBeDefined()
1870
- expect(result?.localeBranding.length).toEqual(1)
1871
- expect(result?.localeBranding[0].locale).toBeUndefined()
1872
- expect(result?.localeBranding[0].alias).toBeUndefined()
1873
- expect(result?.localeBranding[0].logo!.uri).toBeUndefined()
1874
- expect(result?.localeBranding[0].logo!.dataUri).toBeUndefined()
1875
- expect(result?.localeBranding[0].logo!.mediaType).toBeUndefined()
1876
- expect(result?.localeBranding[0].logo!.alt).toBeUndefined()
1877
- expect(result?.localeBranding[0].description).toBeUndefined()
1878
- expect(result?.localeBranding[0].background!.image!.uri).toBeUndefined()
1879
- expect(result?.localeBranding[0].background!.image!.dataUri).toBeUndefined()
1880
- expect(result?.localeBranding[0].background!.image!.mediaType).toBeUndefined()
1881
- expect(result?.localeBranding[0].background!.image!.alt).toBeUndefined()
1882
- expect(result?.localeBranding[0].text!.color).toBeUndefined()
1883
- })
1884
- })
1
+ import { DataSource } from 'typeorm'
2
+ import { IssuanceBrandingStore } from '../issuanceBranding/IssuanceBrandingStore'
3
+ import { DataStoreMigrations } from '../migrations'
4
+ import {
5
+ BackgroundAttributesEntity,
6
+ CredentialLocaleBrandingEntity,
7
+ DataStoreIssuanceBrandingEntities,
8
+ IAddCredentialLocaleBrandingArgs,
9
+ IAddIssuerLocaleBrandingArgs,
10
+ IBasicCredentialBranding,
11
+ IBasicCredentialLocaleBranding,
12
+ IBasicIssuerBranding,
13
+ IBasicIssuerLocaleBranding,
14
+ ICredentialBranding,
15
+ ICredentialLocaleBranding,
16
+ IGetCredentialLocaleBrandingArgs,
17
+ IGetIssuerLocaleBrandingArgs,
18
+ IIssuerBranding,
19
+ IIssuerLocaleBranding,
20
+ ILocaleBranding,
21
+ ImageAttributesEntity,
22
+ ImageDimensionsEntity,
23
+ IssuerLocaleBrandingEntity,
24
+ IUpdateCredentialLocaleBrandingArgs,
25
+ IUpdateIssuerLocaleBrandingArgs,
26
+ TextAttributesEntity,
27
+ } from '../index'
28
+
29
+ describe('Issuance branding store tests', (): void => {
30
+ let dbConnection: DataSource
31
+ let issuanceBrandingStore: IssuanceBrandingStore
32
+
33
+ beforeEach(async (): Promise<void> => {
34
+ dbConnection = await new DataSource({
35
+ type: 'sqlite',
36
+ database: ':memory:',
37
+ //logging: ['info'],
38
+ migrationsRun: false,
39
+ migrations: DataStoreMigrations,
40
+ synchronize: false,
41
+ entities: DataStoreIssuanceBrandingEntities,
42
+ }).initialize()
43
+ await dbConnection.runMigrations()
44
+ expect(await dbConnection.showMigrations()).toBeFalsy()
45
+ issuanceBrandingStore = new IssuanceBrandingStore(dbConnection)
46
+ })
47
+
48
+ afterEach(async (): Promise<void> => {
49
+ await (await dbConnection).destroy()
50
+ })
51
+
52
+ // Credential tests
53
+
54
+ it('should add credential branding', async (): Promise<void> => {
55
+ const credentialBranding: IBasicCredentialBranding = {
56
+ issuerCorrelationId: 'issuerCorrelationId',
57
+ vcHash: 'vcHash',
58
+ localeBranding: [
59
+ {
60
+ alias: 'credentialTypeAlias',
61
+ locale: 'en-US',
62
+ },
63
+ {
64
+ alias: 'credentialTypeAlias',
65
+ locale: 'en-GB',
66
+ },
67
+ ],
68
+ }
69
+
70
+ const result: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
71
+
72
+ expect(result).toBeDefined()
73
+ expect(result?.issuerCorrelationId).toEqual(credentialBranding.issuerCorrelationId)
74
+ expect(result?.vcHash).toEqual(credentialBranding.vcHash)
75
+ expect(result?.localeBranding.length).toEqual(2)
76
+ })
77
+
78
+ it('should throw error when adding credential branding with duplicate vc hash', async (): Promise<void> => {
79
+ const credentialBranding1: IBasicCredentialBranding = {
80
+ issuerCorrelationId: 'issuerCorrelationId',
81
+ vcHash: 'vcHash',
82
+ localeBranding: [
83
+ {
84
+ alias: 'credentialTypeAlias',
85
+ locale: 'en-US',
86
+ },
87
+ ],
88
+ }
89
+
90
+ const result: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
91
+ expect(result).toBeDefined()
92
+
93
+ const credentialBranding2: IBasicCredentialBranding = {
94
+ issuerCorrelationId: 'issuerCorrelationId',
95
+ vcHash: 'vcHash',
96
+ localeBranding: [
97
+ {
98
+ alias: 'credentialTypeAlias',
99
+ locale: 'en-US',
100
+ },
101
+ ],
102
+ }
103
+
104
+ await expect(issuanceBrandingStore.addCredentialBranding(credentialBranding2)).rejects.toThrowError(
105
+ `Credential branding already present for vc with hash: ${credentialBranding2.vcHash}`,
106
+ )
107
+ })
108
+
109
+ it('should throw error when adding credential branding with duplicates locales', async (): Promise<void> => {
110
+ const credentialBranding1: IBasicCredentialBranding = {
111
+ issuerCorrelationId: 'issuerCorrelationId',
112
+ vcHash: 'vcHash',
113
+ localeBranding: [
114
+ {
115
+ alias: 'credentialTypeAlias',
116
+ locale: 'en-US',
117
+ },
118
+ {
119
+ alias: 'credentialTypeAlias',
120
+ locale: 'en-US',
121
+ },
122
+ ],
123
+ }
124
+
125
+ await expect(issuanceBrandingStore.addCredentialBranding(credentialBranding1)).rejects.toThrowError(
126
+ 'Credential branding contains duplicate locales',
127
+ )
128
+
129
+ const credentialBranding2: IBasicCredentialBranding = {
130
+ issuerCorrelationId: 'issuerCorrelationId',
131
+ vcHash: 'vcHash',
132
+ localeBranding: [
133
+ {
134
+ alias: 'credentialTypeAlias',
135
+ },
136
+ {
137
+ alias: 'credentialTypeAlias',
138
+ },
139
+ ],
140
+ }
141
+
142
+ await expect(issuanceBrandingStore.addCredentialBranding(credentialBranding2)).rejects.toThrowError(
143
+ 'Credential branding contains duplicate locales',
144
+ )
145
+ })
146
+
147
+ it('should get all credential branding', async (): Promise<void> => {
148
+ const credentialBranding1: IBasicCredentialBranding = {
149
+ issuerCorrelationId: 'issuerCorrelationId',
150
+ vcHash: 'vcHash1',
151
+ localeBranding: [
152
+ {
153
+ alias: 'credentialTypeAlias',
154
+ locale: 'en-US',
155
+ },
156
+ ],
157
+ }
158
+
159
+ const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
160
+ expect(savedCredentialBranding1).toBeDefined()
161
+
162
+ const credentialBranding2: IBasicCredentialBranding = {
163
+ issuerCorrelationId: 'issuerCorrelationId',
164
+ vcHash: 'vcHash2',
165
+ localeBranding: [
166
+ {
167
+ alias: 'credentialTypeAlias',
168
+ locale: 'en-US',
169
+ },
170
+ ],
171
+ }
172
+
173
+ const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
174
+ expect(savedCredentialBranding2).toBeDefined()
175
+
176
+ const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding()
177
+
178
+ expect(result.length).toEqual(2)
179
+ })
180
+
181
+ it('should get all credential branding for a certain locale', async (): Promise<void> => {
182
+ const credentialBranding1: IBasicCredentialBranding = {
183
+ issuerCorrelationId: 'issuerCorrelationId',
184
+ vcHash: 'vcHash1',
185
+ localeBranding: [
186
+ {
187
+ alias: 'credentialTypeAlias',
188
+ locale: 'en-US',
189
+ },
190
+ {
191
+ alias: 'credentialTypeAlias',
192
+ locale: 'en-GB',
193
+ },
194
+ ],
195
+ }
196
+
197
+ const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
198
+ expect(savedCredentialBranding1).toBeDefined()
199
+
200
+ const credentialBranding2: IBasicCredentialBranding = {
201
+ issuerCorrelationId: 'issuerCorrelationId',
202
+ vcHash: 'vcHash2',
203
+ localeBranding: [
204
+ {
205
+ alias: 'credentialTypeAlias',
206
+ locale: 'en-US',
207
+ },
208
+ ],
209
+ }
210
+
211
+ const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
212
+ expect(savedCredentialBranding2).toBeDefined()
213
+
214
+ const args = {
215
+ filter: [
216
+ {
217
+ localeBranding: {
218
+ locale: 'en-US',
219
+ },
220
+ },
221
+ ],
222
+ }
223
+
224
+ const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
225
+
226
+ expect(result.length).toEqual(2)
227
+ })
228
+
229
+ it('should get credential branding with a certain locale', async (): Promise<void> => {
230
+ const credentialBranding1: IBasicCredentialBranding = {
231
+ issuerCorrelationId: 'issuerCorrelationId',
232
+ vcHash: 'vcHash1',
233
+ localeBranding: [
234
+ {
235
+ alias: 'credentialTypeAlias',
236
+ locale: 'en-US',
237
+ },
238
+ {
239
+ alias: 'credentialTypeAlias',
240
+ locale: 'en-GB',
241
+ },
242
+ ],
243
+ }
244
+
245
+ const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
246
+ expect(savedCredentialBranding1).toBeDefined()
247
+
248
+ const credentialBranding2: IBasicCredentialBranding = {
249
+ issuerCorrelationId: 'issuerCorrelationId',
250
+ vcHash: 'vcHash2',
251
+ localeBranding: [
252
+ {
253
+ alias: 'credentialTypeAlias',
254
+ locale: 'en-US',
255
+ },
256
+ ],
257
+ }
258
+
259
+ const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
260
+ expect(savedCredentialBranding2).toBeDefined()
261
+
262
+ const args = {
263
+ filter: [
264
+ {
265
+ vcHash: 'vcHash1',
266
+ localeBranding: {
267
+ locale: 'en-US',
268
+ },
269
+ },
270
+ ],
271
+ }
272
+
273
+ const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
274
+
275
+ expect(result.length).toEqual(1)
276
+ })
277
+
278
+ it('should get all credential branding with no locale', async (): Promise<void> => {
279
+ const credentialBranding1: IBasicCredentialBranding = {
280
+ issuerCorrelationId: 'issuerCorrelationId',
281
+ vcHash: 'vcHash1',
282
+ localeBranding: [
283
+ {
284
+ alias: 'credentialTypeAlias',
285
+ locale: 'en-US',
286
+ },
287
+ {
288
+ alias: 'credentialTypeAlias',
289
+ },
290
+ ],
291
+ }
292
+
293
+ const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
294
+ expect(savedCredentialBranding1).toBeDefined()
295
+
296
+ const credentialBranding2: IBasicCredentialBranding = {
297
+ issuerCorrelationId: 'issuerCorrelationId',
298
+ vcHash: 'vcHash2',
299
+ localeBranding: [
300
+ {
301
+ alias: 'credentialTypeAlias',
302
+ locale: 'en-US',
303
+ },
304
+ ],
305
+ }
306
+
307
+ const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
308
+ expect(savedCredentialBranding2).toBeDefined()
309
+
310
+ const args = {
311
+ filter: [
312
+ {
313
+ localeBranding: {
314
+ locale: undefined,
315
+ },
316
+ },
317
+ ],
318
+ }
319
+
320
+ const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
321
+
322
+ expect(result.length).toEqual(1)
323
+ })
324
+
325
+ it('should get all credential locale branding with no locale', async (): Promise<void> => {
326
+ const credentialBranding1: IBasicCredentialBranding = {
327
+ issuerCorrelationId: 'issuerCorrelationId',
328
+ vcHash: 'vcHash1',
329
+ localeBranding: [
330
+ {
331
+ alias: 'credentialTypeAlias',
332
+ locale: 'en-US',
333
+ },
334
+ {
335
+ alias: 'credentialTypeAlias',
336
+ },
337
+ ],
338
+ }
339
+
340
+ const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
341
+ expect(savedCredentialBranding1).toBeDefined()
342
+
343
+ const credentialBranding2: IBasicCredentialBranding = {
344
+ issuerCorrelationId: 'issuerCorrelationId',
345
+ vcHash: 'vcHash2',
346
+ localeBranding: [
347
+ {
348
+ alias: 'credentialTypeAlias',
349
+ locale: 'en-US',
350
+ },
351
+ ],
352
+ }
353
+
354
+ const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
355
+ expect(savedCredentialBranding2).toBeDefined()
356
+
357
+ const args = {
358
+ filter: [
359
+ {
360
+ locale: undefined,
361
+ },
362
+ ],
363
+ }
364
+
365
+ const result: Array<ICredentialLocaleBranding> = await issuanceBrandingStore.getCredentialLocaleBranding(args)
366
+
367
+ expect(result.length).toEqual(1)
368
+ })
369
+
370
+ it('should get all credential branding for multiple locales', async (): Promise<void> => {
371
+ const credentialBranding1: IBasicCredentialBranding = {
372
+ issuerCorrelationId: 'issuerCorrelationId',
373
+ vcHash: 'vcHash1',
374
+ localeBranding: [
375
+ {
376
+ alias: 'credentialTypeAlias',
377
+ locale: 'en-GB',
378
+ },
379
+ ],
380
+ }
381
+
382
+ const savedCredentialBranding1: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding1)
383
+ expect(savedCredentialBranding1).toBeDefined()
384
+
385
+ const credentialBranding2: IBasicCredentialBranding = {
386
+ issuerCorrelationId: 'issuerCorrelationId',
387
+ vcHash: 'vcHash2',
388
+ localeBranding: [
389
+ {
390
+ alias: 'credentialTypeAlias',
391
+ locale: 'en-US',
392
+ },
393
+ ],
394
+ }
395
+
396
+ const savedCredentialBranding2: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding2)
397
+ expect(savedCredentialBranding2).toBeDefined()
398
+
399
+ const args = {
400
+ filter: [
401
+ {
402
+ localeBranding: {
403
+ locale: 'en-US',
404
+ },
405
+ },
406
+ {
407
+ localeBranding: {
408
+ locale: 'en-GB',
409
+ },
410
+ },
411
+ ],
412
+ }
413
+
414
+ const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
415
+
416
+ expect(result.length).toEqual(2)
417
+ })
418
+
419
+ it('should return no credential branding with not matching filter', async (): Promise<void> => {
420
+ const credentialBranding: IBasicCredentialBranding = {
421
+ issuerCorrelationId: 'issuerCorrelationId',
422
+ vcHash: 'vcHash',
423
+ localeBranding: [
424
+ {
425
+ alias: 'credentialTypeAlias',
426
+ locale: 'en-GB',
427
+ },
428
+ ],
429
+ }
430
+
431
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
432
+ expect(savedCredentialBranding).toBeDefined()
433
+
434
+ const args = {
435
+ filter: [
436
+ {
437
+ localeBranding: {
438
+ locale: 'en-US',
439
+ },
440
+ },
441
+ ],
442
+ }
443
+
444
+ const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding(args)
445
+
446
+ expect(result.length).toEqual(0)
447
+ })
448
+
449
+ it('should update credential branding', async (): Promise<void> => {
450
+ const credentialBranding: IBasicCredentialBranding = {
451
+ issuerCorrelationId: 'issuerCorrelationId',
452
+ vcHash: 'vcHash',
453
+ localeBranding: [
454
+ {
455
+ alias: 'credentialTypeAlias',
456
+ locale: 'en-US',
457
+ },
458
+ ],
459
+ }
460
+
461
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
462
+ expect(savedCredentialBranding).toBeDefined()
463
+
464
+ const updatedCredentialBranding = {
465
+ id: savedCredentialBranding.id,
466
+ issuerCorrelationId: 'newIssuerCorrelationId',
467
+ vcHash: 'newVcHash',
468
+ }
469
+ const result: ICredentialBranding = await issuanceBrandingStore.updateCredentialBranding({ credentialBranding: updatedCredentialBranding })
470
+
471
+ expect(result).toBeDefined()
472
+ expect(result?.localeBranding?.length).toEqual(1)
473
+ expect(result?.vcHash).toEqual(updatedCredentialBranding.vcHash)
474
+ expect(result?.issuerCorrelationId).toEqual(updatedCredentialBranding.issuerCorrelationId)
475
+ })
476
+
477
+ it('should throw error when updating credential branding with unknown id', async (): Promise<void> => {
478
+ const credentialBranding = {
479
+ id: 'unknownId',
480
+ issuerCorrelationId: 'newIssuerCorrelationId',
481
+ vcHash: 'newVcHash',
482
+ }
483
+
484
+ await expect(issuanceBrandingStore.updateCredentialBranding({ credentialBranding })).rejects.toThrowError(
485
+ `No credential branding found for id: ${credentialBranding.id}`,
486
+ )
487
+ })
488
+
489
+ it('should remove credential branding and all children', async (): Promise<void> => {
490
+ const credentialBranding: IBasicCredentialBranding = {
491
+ issuerCorrelationId: 'issuerCorrelationId',
492
+ vcHash: 'vcHash',
493
+ localeBranding: [
494
+ {
495
+ alias: 'credentialTypeAlias',
496
+ locale: 'en-US',
497
+ logo: {
498
+ uri: 'data:image/jpeg;base64,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',
499
+ mediaType: 'image/jpeg',
500
+ alt: 'Sphereon logo',
501
+ dimensions: {
502
+ width: 200,
503
+ height: 200,
504
+ },
505
+ },
506
+ description: 'Sphereon credential branding',
507
+ background: {
508
+ color: '#7C1010',
509
+ image: {
510
+ uri: 'data:image/png;base64,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',
511
+ alt: 'Sphereon background',
512
+ mediaType: 'image/png',
513
+ dimensions: {
514
+ width: 262,
515
+ height: 116,
516
+ },
517
+ },
518
+ },
519
+ text: {
520
+ color: '#000000',
521
+ },
522
+ },
523
+ ],
524
+ }
525
+
526
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
527
+ expect(savedCredentialBranding).toBeDefined()
528
+ const branding: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding()
529
+ expect(branding.length).toEqual(1)
530
+
531
+ await issuanceBrandingStore.removeCredentialBranding({ filter: [{ id: savedCredentialBranding.id }] })
532
+
533
+ // check background image dimensions
534
+ expect(
535
+ await dbConnection.getRepository(ImageDimensionsEntity).findOne({
536
+ where: { id: savedCredentialBranding?.localeBranding[0]?.background?.image?.dimensions?.id },
537
+ }),
538
+ ).toBeNull()
539
+
540
+ // check background image
541
+ expect(
542
+ await dbConnection.getRepository(ImageAttributesEntity).findOne({
543
+ where: { id: savedCredentialBranding?.localeBranding[0]?.background?.image?.id },
544
+ }),
545
+ ).toBeNull()
546
+
547
+ // check background
548
+ expect(
549
+ await dbConnection.getRepository(BackgroundAttributesEntity).findOne({
550
+ where: { id: savedCredentialBranding?.localeBranding[0]?.background?.id },
551
+ }),
552
+ ).toBeNull()
553
+
554
+ // check logo dimensions
555
+ expect(
556
+ await dbConnection.getRepository(ImageDimensionsEntity).findOne({
557
+ where: { id: savedCredentialBranding?.localeBranding[0]?.logo?.dimensions?.id },
558
+ }),
559
+ ).toBeNull()
560
+
561
+ // check logo
562
+ expect(
563
+ await dbConnection.getRepository(ImageAttributesEntity).findOne({
564
+ where: { id: savedCredentialBranding?.localeBranding[0]?.logo?.id },
565
+ }),
566
+ ).toBeNull()
567
+
568
+ // check text
569
+ expect(
570
+ await dbConnection.getRepository(TextAttributesEntity).findOne({
571
+ where: { id: savedCredentialBranding?.localeBranding[0]?.text?.id },
572
+ }),
573
+ ).toBeNull()
574
+
575
+ // check credential locale branding
576
+ expect(
577
+ await dbConnection.getRepository(CredentialLocaleBrandingEntity).findOne({
578
+ where: { id: savedCredentialBranding?.localeBranding[0]?.id },
579
+ }),
580
+ ).toBeNull()
581
+
582
+ const result: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding()
583
+
584
+ expect(result.length).toEqual(0)
585
+ })
586
+
587
+ it('should add credential locale branding', async (): Promise<void> => {
588
+ const credentialBranding: IBasicCredentialBranding = {
589
+ issuerCorrelationId: 'issuerCorrelationId',
590
+ vcHash: 'vcHash',
591
+ localeBranding: [
592
+ {
593
+ alias: 'credentialTypeAlias',
594
+ locale: 'en-US',
595
+ },
596
+ ],
597
+ }
598
+
599
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
600
+ expect(savedCredentialBranding).toBeDefined()
601
+
602
+ const addCredentialLocaleBrandingArgs: IAddCredentialLocaleBrandingArgs = {
603
+ credentialBrandingId: savedCredentialBranding.id,
604
+ localeBranding: [
605
+ {
606
+ alias: 'credentialTypeAlias',
607
+ locale: 'en-GB',
608
+ },
609
+ ],
610
+ }
611
+
612
+ const result: ICredentialBranding = await issuanceBrandingStore.addCredentialLocaleBranding(addCredentialLocaleBrandingArgs)
613
+
614
+ expect(result.localeBranding.length).toEqual(2)
615
+ })
616
+
617
+ it('should throw error when adding credential locale branding with unknown id', async (): Promise<void> => {
618
+ const addCredentialLocaleBrandingArgs: IAddCredentialLocaleBrandingArgs = {
619
+ credentialBrandingId: 'unknownId',
620
+ localeBranding: [
621
+ {
622
+ alias: 'credentialTypeAlias',
623
+ locale: 'en-GB',
624
+ },
625
+ ],
626
+ }
627
+
628
+ await expect(issuanceBrandingStore.addCredentialLocaleBranding(addCredentialLocaleBrandingArgs)).rejects.toThrowError(
629
+ `No credential branding found for id: ${addCredentialLocaleBrandingArgs.credentialBrandingId}`,
630
+ )
631
+ })
632
+
633
+ it('should throw error when adding duplicate credential locale branding', async (): Promise<void> => {
634
+ const credentialBranding: IBasicCredentialBranding = {
635
+ issuerCorrelationId: 'issuerCorrelationId',
636
+ vcHash: 'vcHash',
637
+ localeBranding: [
638
+ {
639
+ alias: 'credentialTypeAlias',
640
+ locale: 'en-US',
641
+ },
642
+ {
643
+ alias: 'credentialTypeAlias',
644
+ locale: 'en-GB',
645
+ },
646
+ ],
647
+ }
648
+
649
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
650
+ expect(savedCredentialBranding).toBeDefined()
651
+
652
+ const addCredentialLocaleBrandingArgs: IAddCredentialLocaleBrandingArgs = {
653
+ credentialBrandingId: savedCredentialBranding.id,
654
+ localeBranding: [
655
+ {
656
+ alias: 'credentialTypeAlias',
657
+ locale: 'en-GB',
658
+ },
659
+ {
660
+ alias: 'credentialTypeAlias',
661
+ locale: 'en-US',
662
+ },
663
+ ],
664
+ }
665
+
666
+ await expect(issuanceBrandingStore.addCredentialLocaleBranding(addCredentialLocaleBrandingArgs)).rejects.toThrowError(
667
+ `Credential branding already contains locales: ${addCredentialLocaleBrandingArgs.localeBranding.map(
668
+ (localeBranding: IBasicCredentialLocaleBranding) => localeBranding.locale,
669
+ )}`,
670
+ )
671
+ })
672
+
673
+ it('should get all credential locale branding for a credential branding', async (): Promise<void> => {
674
+ const credentialBranding: IBasicCredentialBranding = {
675
+ issuerCorrelationId: 'credentialCorrelationId',
676
+ vcHash: 'vcHash',
677
+ localeBranding: [
678
+ {
679
+ alias: 'credentialTypeAlias',
680
+ locale: 'en-US',
681
+ },
682
+ {
683
+ alias: 'credentialTypeAlias',
684
+ locale: 'en-GB',
685
+ },
686
+ ],
687
+ }
688
+
689
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
690
+ expect(savedCredentialBranding).toBeDefined()
691
+
692
+ const result: Array<ICredentialLocaleBranding> = await issuanceBrandingStore.getCredentialLocaleBranding()
693
+
694
+ expect(result.length).toEqual(2)
695
+ })
696
+
697
+ it('should get credential locale branding for a credential branding', async (): Promise<void> => {
698
+ const credentialBranding: IBasicCredentialBranding = {
699
+ issuerCorrelationId: 'credentialCorrelationId',
700
+ vcHash: 'vcHash',
701
+ localeBranding: [
702
+ {
703
+ alias: 'blabla',
704
+ locale: 'en-US',
705
+ },
706
+ {
707
+ alias: 'credentialTypeAlias2',
708
+ locale: 'en-GB',
709
+ },
710
+ ],
711
+ }
712
+
713
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
714
+ expect(savedCredentialBranding).toBeDefined()
715
+
716
+ const getCredentialLocaleBrandingArgs: IGetCredentialLocaleBrandingArgs = {
717
+ filter: [
718
+ {
719
+ credentialBranding: {
720
+ id: savedCredentialBranding.id,
721
+ },
722
+ locale: 'en-US',
723
+ },
724
+ ],
725
+ }
726
+
727
+ const result: Array<ICredentialLocaleBranding> = await issuanceBrandingStore.getCredentialLocaleBranding(getCredentialLocaleBrandingArgs)
728
+
729
+ expect(result.length).toEqual(1)
730
+ })
731
+
732
+ it('should update credential locale branding', async (): Promise<void> => {
733
+ const credentialBranding: IBasicCredentialBranding = {
734
+ issuerCorrelationId: 'credentialCorrelationId',
735
+ vcHash: 'vcHash',
736
+ localeBranding: [
737
+ {
738
+ alias: 'credentialTypeAlias',
739
+ locale: 'en-US',
740
+ },
741
+ {
742
+ alias: 'credentialTypeAlias',
743
+ locale: 'en-GB',
744
+ },
745
+ ],
746
+ }
747
+
748
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
749
+ expect(savedCredentialBranding).toBeDefined()
750
+
751
+ const updateCredentialLocaleBrandingArgs: IUpdateCredentialLocaleBrandingArgs = {
752
+ localeBranding: {
753
+ id: savedCredentialBranding.localeBranding[0].id,
754
+ alias: savedCredentialBranding.localeBranding[0].alias,
755
+ locale: 'en-NL',
756
+ },
757
+ }
758
+
759
+ const result: ICredentialLocaleBranding = await issuanceBrandingStore.updateCredentialLocaleBranding(updateCredentialLocaleBrandingArgs)
760
+
761
+ expect(result).toBeDefined()
762
+ })
763
+
764
+ it('should throw error when updating credential branding with duplicate locale', async (): Promise<void> => {
765
+ const credentialBranding: IBasicCredentialBranding = {
766
+ issuerCorrelationId: 'credentialCorrelationId',
767
+ vcHash: 'vcHash',
768
+ localeBranding: [
769
+ {
770
+ alias: 'credentialTypeAlias',
771
+ locale: 'en-US',
772
+ },
773
+ {
774
+ alias: 'credentialTypeAlias',
775
+ locale: 'en-GB',
776
+ },
777
+ ],
778
+ }
779
+
780
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
781
+ expect(savedCredentialBranding).toBeDefined()
782
+
783
+ const locale = 'en-GB'
784
+ const updateCredentialLocaleBrandingArgs: IUpdateCredentialLocaleBrandingArgs = {
785
+ localeBranding: {
786
+ id: savedCredentialBranding.localeBranding[0].id,
787
+ alias: savedCredentialBranding.localeBranding[0].alias,
788
+ locale,
789
+ },
790
+ }
791
+
792
+ await expect(issuanceBrandingStore.updateCredentialLocaleBranding(updateCredentialLocaleBrandingArgs)).rejects.toThrowError(
793
+ `Credential branding: ${savedCredentialBranding.id} already contains locale: ${locale}`,
794
+ )
795
+ })
796
+
797
+ it('should remove credential locale branding and all children', async (): Promise<void> => {
798
+ const credentialBranding: IBasicCredentialBranding = {
799
+ issuerCorrelationId: 'issuerCorrelationId',
800
+ vcHash: 'vcHash',
801
+ localeBranding: [
802
+ {
803
+ alias: 'credentialTypeAlias',
804
+ locale: 'en-US',
805
+ logo: {
806
+ uri: 'data:image/jpeg;base64,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',
807
+ mediaType: 'image/jpeg',
808
+ alt: 'Sphereon logo',
809
+ dimensions: {
810
+ width: 200,
811
+ height: 200,
812
+ },
813
+ },
814
+ description: 'Sphereon credential branding',
815
+ background: {
816
+ color: '#7C1010',
817
+ image: {
818
+ uri: 'data:image/png;base64,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',
819
+ alt: 'Sphereon background',
820
+ mediaType: 'image/png',
821
+ dimensions: {
822
+ width: 262,
823
+ height: 116,
824
+ },
825
+ },
826
+ },
827
+ text: {
828
+ color: '#000000',
829
+ },
830
+ },
831
+ ],
832
+ }
833
+
834
+ const savedCredentialBranding: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
835
+ expect(savedCredentialBranding).toBeDefined()
836
+ const branding: Array<ICredentialBranding> = await issuanceBrandingStore.getCredentialBranding()
837
+ expect(branding.length).toEqual(1)
838
+
839
+ await issuanceBrandingStore.removeCredentialLocaleBranding({ filter: [{ id: savedCredentialBranding.localeBranding[0].id }] })
840
+
841
+ // check background image dimensions
842
+ expect(
843
+ await dbConnection.getRepository(ImageDimensionsEntity).findOne({
844
+ where: { id: savedCredentialBranding?.localeBranding[0]?.background?.image?.dimensions?.id },
845
+ }),
846
+ ).toBeNull()
847
+
848
+ // check background image
849
+ expect(
850
+ await dbConnection.getRepository(ImageAttributesEntity).findOne({
851
+ where: { id: savedCredentialBranding?.localeBranding[0]?.background?.image?.id },
852
+ }),
853
+ ).toBeNull()
854
+
855
+ // check background
856
+ expect(
857
+ await dbConnection.getRepository(BackgroundAttributesEntity).findOne({
858
+ where: { id: savedCredentialBranding?.localeBranding[0]?.background?.id },
859
+ }),
860
+ ).toBeNull()
861
+
862
+ // check logo dimensions
863
+ expect(
864
+ await dbConnection.getRepository(ImageDimensionsEntity).findOne({
865
+ where: { id: savedCredentialBranding?.localeBranding[0]?.logo?.dimensions?.id },
866
+ }),
867
+ ).toBeNull()
868
+
869
+ // check logo
870
+ expect(
871
+ await dbConnection.getRepository(ImageAttributesEntity).findOne({
872
+ where: { id: savedCredentialBranding?.localeBranding[0]?.logo?.id },
873
+ }),
874
+ ).toBeNull()
875
+
876
+ // check text
877
+ expect(
878
+ await dbConnection.getRepository(TextAttributesEntity).findOne({
879
+ where: { id: savedCredentialBranding?.localeBranding[0]?.text?.id },
880
+ }),
881
+ ).toBeNull()
882
+
883
+ // check credential locale branding
884
+ expect(
885
+ await dbConnection.getRepository(CredentialLocaleBrandingEntity).findOne({
886
+ where: { id: savedCredentialBranding?.localeBranding[0]?.id },
887
+ }),
888
+ ).toBeNull()
889
+
890
+ const result: Array<ICredentialLocaleBranding> = await issuanceBrandingStore.getCredentialLocaleBranding()
891
+
892
+ expect(result.length).toEqual(0)
893
+ })
894
+
895
+ it('should show no locale in response when adding credential branding with no locale', async (): Promise<void> => {
896
+ const credentialBranding: IBasicCredentialBranding = {
897
+ issuerCorrelationId: 'issuerCorrelationId',
898
+ vcHash: 'vcHash',
899
+ localeBranding: [
900
+ {
901
+ alias: 'credentialTypeAlias',
902
+ },
903
+ ],
904
+ }
905
+
906
+ const result: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
907
+
908
+ expect(result).toBeDefined()
909
+ expect(result?.localeBranding.length).toEqual(1)
910
+ expect(result?.localeBranding[0].locale).toBeUndefined()
911
+ })
912
+
913
+ it('should show no locale in response when adding credential locale branding with no locale', async (): Promise<void> => {
914
+ const credentialBranding: IBasicCredentialBranding = {
915
+ issuerCorrelationId: 'issuerCorrelationId',
916
+ vcHash: 'vcHash',
917
+ localeBranding: [
918
+ {
919
+ alias: 'credentialTypeAlias',
920
+ locale: 'en-US',
921
+ },
922
+ ],
923
+ }
924
+
925
+ const fromDb: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
926
+ expect(fromDb).toBeDefined()
927
+
928
+ const credentialLocaleBranding: IBasicCredentialLocaleBranding = {
929
+ alias: 'credentialTypeAlias',
930
+ }
931
+
932
+ const result: ICredentialBranding = await issuanceBrandingStore.addCredentialLocaleBranding({
933
+ credentialBrandingId: fromDb.id,
934
+ localeBranding: [credentialLocaleBranding],
935
+ })
936
+
937
+ expect(result).toBeDefined()
938
+ expect(result?.localeBranding.length).toEqual(2)
939
+ expect(result?.localeBranding.filter((localeBranding: ICredentialLocaleBranding) => localeBranding.locale === undefined).length).toEqual(1)
940
+ })
941
+
942
+ it('should store blank strings as undefined when adding credential locale branding', async (): Promise<void> => {
943
+ const credentialBranding: IBasicCredentialBranding = {
944
+ issuerCorrelationId: 'issuerCorrelationId',
945
+ vcHash: 'vcHash',
946
+ localeBranding: [
947
+ {
948
+ alias: '',
949
+ locale: '',
950
+ logo: {
951
+ uri: '',
952
+ dataUri: '',
953
+ mediaType: '',
954
+ alt: '',
955
+ },
956
+ description: '',
957
+ background: {
958
+ color: '',
959
+ image: {
960
+ uri: '',
961
+ mediaType: '',
962
+ dataUri: '',
963
+ alt: '',
964
+ },
965
+ },
966
+ text: {
967
+ color: '',
968
+ },
969
+ },
970
+ ],
971
+ }
972
+
973
+ const result: ICredentialBranding = await issuanceBrandingStore.addCredentialBranding(credentialBranding)
974
+
975
+ expect(result).toBeDefined()
976
+ expect(result?.localeBranding.length).toEqual(1)
977
+ expect(result?.localeBranding[0].locale).toBeUndefined()
978
+ expect(result?.localeBranding[0].alias).toBeUndefined()
979
+ expect(result?.localeBranding[0].logo!.uri).toBeUndefined()
980
+ expect(result?.localeBranding[0].logo!.dataUri).toBeUndefined()
981
+ expect(result?.localeBranding[0].logo!.mediaType).toBeUndefined()
982
+ expect(result?.localeBranding[0].logo!.alt).toBeUndefined()
983
+ expect(result?.localeBranding[0].description).toBeUndefined()
984
+ expect(result?.localeBranding[0].background!.image!.uri).toBeUndefined()
985
+ expect(result?.localeBranding[0].background!.image!.dataUri).toBeUndefined()
986
+ expect(result?.localeBranding[0].background!.image!.mediaType).toBeUndefined()
987
+ expect(result?.localeBranding[0].background!.image!.alt).toBeUndefined()
988
+ expect(result?.localeBranding[0].text!.color).toBeUndefined()
989
+ })
990
+
991
+ // Issuer tests
992
+
993
+ it('should add issuer branding', async (): Promise<void> => {
994
+ const issuerBranding: IBasicIssuerBranding = {
995
+ issuerCorrelationId: 'issuerCorrelationId',
996
+ localeBranding: [
997
+ {
998
+ alias: 'issuerAlias',
999
+ locale: 'en-US',
1000
+ },
1001
+ {
1002
+ alias: 'issuerAlias',
1003
+ locale: 'en-GB',
1004
+ },
1005
+ ],
1006
+ }
1007
+
1008
+ const result: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1009
+
1010
+ expect(result).toBeDefined()
1011
+ expect(result?.issuerCorrelationId).toEqual(issuerBranding.issuerCorrelationId)
1012
+ expect(result?.localeBranding.length).toEqual(2)
1013
+ })
1014
+
1015
+ it('should throw error when adding issuer branding with duplicate issuer correlation id', async (): Promise<void> => {
1016
+ const issuerBranding1: IBasicIssuerBranding = {
1017
+ issuerCorrelationId: 'issuerCorrelationId',
1018
+ localeBranding: [
1019
+ {
1020
+ alias: 'issuerAlias',
1021
+ locale: 'en-US',
1022
+ },
1023
+ ],
1024
+ }
1025
+
1026
+ const result: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1027
+ expect(result).toBeDefined()
1028
+
1029
+ const issuerBranding2: IBasicIssuerBranding = {
1030
+ issuerCorrelationId: 'issuerCorrelationId',
1031
+ localeBranding: [
1032
+ {
1033
+ alias: 'issuerAlias',
1034
+ locale: 'en-US',
1035
+ },
1036
+ ],
1037
+ }
1038
+
1039
+ await expect(issuanceBrandingStore.addIssuerBranding(issuerBranding2)).rejects.toThrowError(
1040
+ `Issuer branding already present for issuer with correlation id: ${issuerBranding2.issuerCorrelationId}`,
1041
+ )
1042
+ })
1043
+
1044
+ it('should throw error when adding issuer branding with duplicates locales', async (): Promise<void> => {
1045
+ const issuerBranding1: IBasicIssuerBranding = {
1046
+ issuerCorrelationId: 'issuerCorrelationId',
1047
+ localeBranding: [
1048
+ {
1049
+ alias: 'issuerAlias',
1050
+ locale: 'en-US',
1051
+ },
1052
+ {
1053
+ alias: 'issuerAlias',
1054
+ locale: 'en-US',
1055
+ },
1056
+ ],
1057
+ }
1058
+
1059
+ await expect(issuanceBrandingStore.addIssuerBranding(issuerBranding1)).rejects.toThrowError('Issuer branding contains duplicate locales')
1060
+
1061
+ const issuerBranding2: IBasicIssuerBranding = {
1062
+ issuerCorrelationId: 'issuerCorrelationId',
1063
+ localeBranding: [
1064
+ {
1065
+ alias: 'issuerAlias',
1066
+ },
1067
+ {
1068
+ alias: 'issuerAlias',
1069
+ },
1070
+ ],
1071
+ }
1072
+
1073
+ await expect(issuanceBrandingStore.addIssuerBranding(issuerBranding2)).rejects.toThrowError('Issuer branding contains duplicate locales')
1074
+ })
1075
+
1076
+ it('should get all issuer branding', async (): Promise<void> => {
1077
+ const issuerBranding1: IBasicIssuerBranding = {
1078
+ issuerCorrelationId: 'issuerCorrelationId1',
1079
+ localeBranding: [
1080
+ {
1081
+ alias: 'issuerAlias',
1082
+ locale: 'en-US',
1083
+ },
1084
+ ],
1085
+ }
1086
+
1087
+ const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1088
+ expect(savedIssuerBranding1).toBeDefined()
1089
+
1090
+ const issuerBranding2: IBasicIssuerBranding = {
1091
+ issuerCorrelationId: 'issuerCorrelationId2',
1092
+ localeBranding: [
1093
+ {
1094
+ alias: 'issuerAlias',
1095
+ locale: 'en-US',
1096
+ },
1097
+ ],
1098
+ }
1099
+
1100
+ const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1101
+ expect(savedIssuerBranding2).toBeDefined()
1102
+
1103
+ const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding()
1104
+
1105
+ expect(result.length).toEqual(2)
1106
+ })
1107
+
1108
+ it('should get all issuer branding for a certain locale', async (): Promise<void> => {
1109
+ const issuerBranding1: IBasicIssuerBranding = {
1110
+ issuerCorrelationId: 'issuerCorrelationId1',
1111
+ localeBranding: [
1112
+ {
1113
+ alias: 'issuerAlias',
1114
+ locale: 'en-US',
1115
+ },
1116
+ {
1117
+ alias: 'issuerAlias',
1118
+ locale: 'en-GB',
1119
+ },
1120
+ ],
1121
+ }
1122
+
1123
+ const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1124
+ expect(savedIssuerBranding1).toBeDefined()
1125
+
1126
+ const issuerBranding2: IBasicIssuerBranding = {
1127
+ issuerCorrelationId: 'issuerCorrelationId2',
1128
+ localeBranding: [
1129
+ {
1130
+ alias: 'issuerAlias',
1131
+ locale: 'en-US',
1132
+ },
1133
+ ],
1134
+ }
1135
+
1136
+ const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1137
+ expect(savedIssuerBranding2).toBeDefined()
1138
+
1139
+ const args = {
1140
+ filter: [
1141
+ {
1142
+ localeBranding: {
1143
+ locale: 'en-US',
1144
+ },
1145
+ },
1146
+ ],
1147
+ }
1148
+
1149
+ const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1150
+
1151
+ expect(result.length).toEqual(2)
1152
+ })
1153
+
1154
+ it('should get issuer branding with a certain locale', async (): Promise<void> => {
1155
+ const issuerBranding1: IBasicIssuerBranding = {
1156
+ issuerCorrelationId: 'issuerCorrelationId1',
1157
+ localeBranding: [
1158
+ {
1159
+ alias: 'issuerAlias',
1160
+ locale: 'en-US',
1161
+ },
1162
+ {
1163
+ alias: 'issuerAlias',
1164
+ locale: 'en-GB',
1165
+ },
1166
+ ],
1167
+ }
1168
+
1169
+ const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1170
+ expect(savedIssuerBranding1).toBeDefined()
1171
+
1172
+ const issuerBranding2: IBasicIssuerBranding = {
1173
+ issuerCorrelationId: 'issuerCorrelationId2',
1174
+ localeBranding: [
1175
+ {
1176
+ alias: 'issuerAlias',
1177
+ locale: 'en-US',
1178
+ },
1179
+ ],
1180
+ }
1181
+
1182
+ const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1183
+ expect(savedIssuerBranding2).toBeDefined()
1184
+
1185
+ const args = {
1186
+ filter: [
1187
+ {
1188
+ issuerCorrelationId: 'issuerCorrelationId1',
1189
+ localeBranding: {
1190
+ locale: 'en-US',
1191
+ },
1192
+ },
1193
+ ],
1194
+ }
1195
+
1196
+ const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1197
+
1198
+ expect(result.length).toEqual(1)
1199
+ })
1200
+
1201
+ it('should get all issuer branding with no locale', async (): Promise<void> => {
1202
+ const issuerBranding1: IBasicIssuerBranding = {
1203
+ issuerCorrelationId: 'issuerCorrelationId1',
1204
+ localeBranding: [
1205
+ {
1206
+ alias: 'issuerAlias',
1207
+ locale: 'en-US',
1208
+ },
1209
+ {
1210
+ alias: 'issuerAlias',
1211
+ },
1212
+ ],
1213
+ }
1214
+
1215
+ const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1216
+ expect(savedIssuerBranding1).toBeDefined()
1217
+
1218
+ const issuerBranding2: IBasicIssuerBranding = {
1219
+ issuerCorrelationId: 'issuerCorrelationId2',
1220
+ localeBranding: [
1221
+ {
1222
+ alias: 'issuerAlias',
1223
+ locale: 'en-US',
1224
+ },
1225
+ ],
1226
+ }
1227
+
1228
+ const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1229
+ expect(savedIssuerBranding2).toBeDefined()
1230
+
1231
+ const args = {
1232
+ filter: [
1233
+ {
1234
+ localeBranding: {
1235
+ locale: undefined,
1236
+ },
1237
+ },
1238
+ ],
1239
+ }
1240
+
1241
+ const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1242
+
1243
+ expect(result.length).toEqual(1)
1244
+ })
1245
+
1246
+ it('should get all issuer locale branding with no locale', async (): Promise<void> => {
1247
+ const issuerBranding1: IBasicIssuerBranding = {
1248
+ issuerCorrelationId: 'issuerCorrelationId1',
1249
+ localeBranding: [
1250
+ {
1251
+ alias: 'issuerAlias',
1252
+ locale: 'en-US',
1253
+ },
1254
+ {
1255
+ alias: 'issuerAlias',
1256
+ },
1257
+ ],
1258
+ }
1259
+
1260
+ const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1261
+ expect(savedIssuerBranding1).toBeDefined()
1262
+
1263
+ const issuerBranding2: IBasicIssuerBranding = {
1264
+ issuerCorrelationId: 'issuerCorrelationId2',
1265
+ localeBranding: [
1266
+ {
1267
+ alias: 'issuerAlias',
1268
+ locale: 'en-US',
1269
+ },
1270
+ ],
1271
+ }
1272
+
1273
+ const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding2)
1274
+ expect(savedIssuerBranding2).toBeDefined()
1275
+
1276
+ const args = {
1277
+ filter: [
1278
+ {
1279
+ locale: undefined,
1280
+ },
1281
+ ],
1282
+ }
1283
+
1284
+ const result: Array<IIssuerLocaleBranding> = await issuanceBrandingStore.getIssuerLocaleBranding(args)
1285
+
1286
+ expect(result.length).toEqual(1)
1287
+ })
1288
+
1289
+ it('should get all issuer branding for multiple locales', async (): Promise<void> => {
1290
+ const issuerBranding1: IBasicIssuerBranding = {
1291
+ issuerCorrelationId: 'issuerCorrelationId1',
1292
+ localeBranding: [
1293
+ {
1294
+ alias: 'issuerAlias',
1295
+ locale: 'en-GB',
1296
+ },
1297
+ ],
1298
+ }
1299
+
1300
+ const savedIssuerBranding1: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding1)
1301
+ expect(savedIssuerBranding1).toBeDefined()
1302
+
1303
+ const credentialBranding2: IBasicIssuerBranding = {
1304
+ issuerCorrelationId: 'issuerCorrelationId2',
1305
+ localeBranding: [
1306
+ {
1307
+ alias: 'issuerAlias',
1308
+ locale: 'en-US',
1309
+ },
1310
+ ],
1311
+ }
1312
+
1313
+ const savedIssuerBranding2: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(credentialBranding2)
1314
+ expect(savedIssuerBranding2).toBeDefined()
1315
+
1316
+ const args = {
1317
+ filter: [
1318
+ {
1319
+ localeBranding: {
1320
+ locale: 'en-US',
1321
+ },
1322
+ },
1323
+ {
1324
+ localeBranding: {
1325
+ locale: 'en-GB',
1326
+ },
1327
+ },
1328
+ ],
1329
+ }
1330
+
1331
+ const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1332
+
1333
+ expect(result.length).toEqual(2)
1334
+ })
1335
+
1336
+ it('should return no issuer branding with not matching filter', async (): Promise<void> => {
1337
+ const issuerBranding: IBasicIssuerBranding = {
1338
+ issuerCorrelationId: 'issuerCorrelationId',
1339
+ localeBranding: [
1340
+ {
1341
+ alias: 'issuerAlias',
1342
+ locale: 'en-GB',
1343
+ },
1344
+ ],
1345
+ }
1346
+
1347
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1348
+ expect(savedIssuerBranding).toBeDefined()
1349
+
1350
+ const args = {
1351
+ filter: [
1352
+ {
1353
+ localeBranding: {
1354
+ locale: 'en-US',
1355
+ },
1356
+ },
1357
+ ],
1358
+ }
1359
+
1360
+ const result: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding(args)
1361
+
1362
+ expect(result.length).toEqual(0)
1363
+ })
1364
+
1365
+ it('should update issuer branding', async (): Promise<void> => {
1366
+ const issuerBranding: IBasicIssuerBranding = {
1367
+ issuerCorrelationId: 'issuerCorrelationId',
1368
+ localeBranding: [
1369
+ {
1370
+ alias: 'issuerAlias',
1371
+ locale: 'en-US',
1372
+ },
1373
+ ],
1374
+ }
1375
+
1376
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1377
+ expect(savedIssuerBranding).toBeDefined()
1378
+
1379
+ const updatedIssuerBranding = {
1380
+ id: savedIssuerBranding.id,
1381
+ issuerCorrelationId: 'newIssuerCorrelationId',
1382
+ }
1383
+ const result: IIssuerBranding = await issuanceBrandingStore.updateIssuerBranding({ issuerBranding: updatedIssuerBranding })
1384
+
1385
+ expect(result).toBeDefined()
1386
+ expect(result?.localeBranding?.length).toEqual(1)
1387
+ expect(result?.issuerCorrelationId).toEqual(updatedIssuerBranding.issuerCorrelationId)
1388
+ })
1389
+
1390
+ it('should throw error when updating issuer branding with unknown id', async (): Promise<void> => {
1391
+ const issuerBranding = {
1392
+ id: 'unknownId',
1393
+ issuerCorrelationId: 'newIssuerCorrelationId',
1394
+ vcHash: 'newVcHash',
1395
+ }
1396
+
1397
+ await expect(issuanceBrandingStore.updateIssuerBranding({ issuerBranding })).rejects.toThrowError(
1398
+ `No issuer branding found for id: ${issuerBranding.id}`,
1399
+ )
1400
+ })
1401
+
1402
+ it('should remove issuer branding and all children', async (): Promise<void> => {
1403
+ const issuerBranding: IBasicIssuerBranding = {
1404
+ issuerCorrelationId: 'issuerCorrelationId',
1405
+ localeBranding: [
1406
+ {
1407
+ alias: 'issuerAlias',
1408
+ locale: 'en-US',
1409
+ logo: {
1410
+ uri: 'data:image/jpeg;base64,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',
1411
+ mediaType: 'image/jpeg',
1412
+ alt: 'Sphereon logo',
1413
+ dimensions: {
1414
+ width: 200,
1415
+ height: 200,
1416
+ },
1417
+ },
1418
+ description: 'Sphereon credential branding',
1419
+ background: {
1420
+ color: '#7C1010',
1421
+ image: {
1422
+ uri: 'data:image/png;base64,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',
1423
+ alt: 'Sphereon background',
1424
+ mediaType: 'image/png',
1425
+ dimensions: {
1426
+ width: 262,
1427
+ height: 116,
1428
+ },
1429
+ },
1430
+ },
1431
+ text: {
1432
+ color: '#000000',
1433
+ },
1434
+ },
1435
+ ],
1436
+ }
1437
+
1438
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1439
+ expect(savedIssuerBranding).toBeDefined()
1440
+ const branding: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding()
1441
+ expect(branding.length).toEqual(1)
1442
+
1443
+ await issuanceBrandingStore.removeIssuerBranding({ filter: [{ id: savedIssuerBranding.id }] })
1444
+
1445
+ // check background image dimensions
1446
+ expect(
1447
+ await dbConnection.getRepository(ImageDimensionsEntity).findOne({
1448
+ where: { id: savedIssuerBranding?.localeBranding[0]?.background?.image?.dimensions?.id },
1449
+ }),
1450
+ ).toBeNull()
1451
+
1452
+ // check background image
1453
+ expect(
1454
+ await dbConnection.getRepository(ImageAttributesEntity).findOne({
1455
+ where: { id: savedIssuerBranding?.localeBranding[0]?.background?.image?.id },
1456
+ }),
1457
+ ).toBeNull()
1458
+
1459
+ // check background
1460
+ expect(
1461
+ await dbConnection.getRepository(BackgroundAttributesEntity).findOne({
1462
+ where: { id: savedIssuerBranding?.localeBranding[0]?.background?.id },
1463
+ }),
1464
+ ).toBeNull()
1465
+
1466
+ // check logo dimensions
1467
+ expect(
1468
+ await dbConnection.getRepository(ImageDimensionsEntity).findOne({
1469
+ where: { id: savedIssuerBranding?.localeBranding[0]?.logo?.dimensions?.id },
1470
+ }),
1471
+ ).toBeNull()
1472
+
1473
+ // check logo
1474
+ expect(
1475
+ await dbConnection.getRepository(ImageAttributesEntity).findOne({
1476
+ where: { id: savedIssuerBranding?.localeBranding[0]?.logo?.id },
1477
+ }),
1478
+ ).toBeNull()
1479
+
1480
+ // check text
1481
+ expect(
1482
+ await dbConnection.getRepository(TextAttributesEntity).findOne({
1483
+ where: { id: savedIssuerBranding?.localeBranding[0]?.text?.id },
1484
+ }),
1485
+ ).toBeNull()
1486
+
1487
+ // check issuer locale branding
1488
+ expect(
1489
+ await dbConnection.getRepository(IssuerLocaleBrandingEntity).findOne({
1490
+ where: { id: savedIssuerBranding?.localeBranding[0]?.id },
1491
+ }),
1492
+ ).toBeNull()
1493
+ })
1494
+
1495
+ it('should add issuer locale branding', async (): Promise<void> => {
1496
+ const issuerBranding: IBasicIssuerBranding = {
1497
+ issuerCorrelationId: 'issuerCorrelationId',
1498
+ localeBranding: [
1499
+ {
1500
+ alias: 'issuerAlias',
1501
+ locale: 'en-US',
1502
+ },
1503
+ ],
1504
+ }
1505
+
1506
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1507
+ expect(savedIssuerBranding).toBeDefined()
1508
+
1509
+ const addIssuerLocaleBrandingArgs: IAddIssuerLocaleBrandingArgs = {
1510
+ issuerBrandingId: savedIssuerBranding.id,
1511
+ localeBranding: [
1512
+ {
1513
+ alias: 'issuerAlias',
1514
+ locale: 'en-GB',
1515
+ },
1516
+ ],
1517
+ }
1518
+
1519
+ const result: IIssuerBranding = await issuanceBrandingStore.addIssuerLocaleBranding(addIssuerLocaleBrandingArgs)
1520
+
1521
+ expect(result.localeBranding.length).toEqual(2)
1522
+ })
1523
+
1524
+ it('should throw error when adding issuer locale branding with unknown id', async (): Promise<void> => {
1525
+ const addIssuerLocaleBrandingArgs: IAddIssuerLocaleBrandingArgs = {
1526
+ issuerBrandingId: 'unknownId',
1527
+ localeBranding: [
1528
+ {
1529
+ alias: 'issuerAlias',
1530
+ locale: 'en-GB',
1531
+ },
1532
+ ],
1533
+ }
1534
+
1535
+ await expect(issuanceBrandingStore.addIssuerLocaleBranding(addIssuerLocaleBrandingArgs)).rejects.toThrowError(
1536
+ `No issuer branding found for id: ${addIssuerLocaleBrandingArgs.issuerBrandingId}`,
1537
+ )
1538
+ })
1539
+
1540
+ it('should throw error when adding duplicate issuer locale branding', async (): Promise<void> => {
1541
+ const issuerBranding: IBasicIssuerBranding = {
1542
+ issuerCorrelationId: 'issuerCorrelationId',
1543
+ localeBranding: [
1544
+ {
1545
+ alias: 'issuerAlias',
1546
+ locale: 'en-US',
1547
+ },
1548
+ {
1549
+ alias: 'issuerAlias',
1550
+ locale: 'en-GB',
1551
+ },
1552
+ ],
1553
+ }
1554
+
1555
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1556
+ expect(savedIssuerBranding).toBeDefined()
1557
+
1558
+ const addIssuerLocaleBrandingArgs: IAddIssuerLocaleBrandingArgs = {
1559
+ issuerBrandingId: savedIssuerBranding.id,
1560
+ localeBranding: [
1561
+ {
1562
+ alias: 'issuerAlias',
1563
+ locale: 'en-GB',
1564
+ },
1565
+ {
1566
+ alias: 'issuerAlias',
1567
+ locale: 'en-US',
1568
+ },
1569
+ ],
1570
+ }
1571
+
1572
+ await expect(issuanceBrandingStore.addIssuerLocaleBranding(addIssuerLocaleBrandingArgs)).rejects.toThrowError(
1573
+ `Issuer branding already contains locales: ${addIssuerLocaleBrandingArgs.localeBranding.map(
1574
+ (localeBranding: IBasicIssuerLocaleBranding) => localeBranding.locale,
1575
+ )}`,
1576
+ )
1577
+ })
1578
+
1579
+ it('should get all issuer locale branding for a credential branding', async (): Promise<void> => {
1580
+ const issuerBranding: IBasicIssuerBranding = {
1581
+ issuerCorrelationId: 'issuerCorrelationId',
1582
+ localeBranding: [
1583
+ {
1584
+ alias: 'issuerAlias',
1585
+ locale: 'en-US',
1586
+ },
1587
+ {
1588
+ alias: 'issuerAlias',
1589
+ locale: 'en-GB',
1590
+ },
1591
+ ],
1592
+ }
1593
+
1594
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1595
+ expect(savedIssuerBranding).toBeDefined()
1596
+
1597
+ const result: Array<ILocaleBranding> = await issuanceBrandingStore.getIssuerLocaleBranding()
1598
+
1599
+ expect(result.length).toEqual(2)
1600
+ })
1601
+
1602
+ it('should get issuer locale branding for a issuer branding', async (): Promise<void> => {
1603
+ const issuerBranding: IBasicIssuerBranding = {
1604
+ issuerCorrelationId: 'credentialCorrelationId',
1605
+ localeBranding: [
1606
+ {
1607
+ alias: 'issuerAlias',
1608
+ locale: 'en-US',
1609
+ },
1610
+ {
1611
+ alias: 'issuerAlias',
1612
+ locale: 'en-GB',
1613
+ },
1614
+ ],
1615
+ }
1616
+
1617
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1618
+ expect(savedIssuerBranding).toBeDefined()
1619
+
1620
+ const getIssuerLocaleBrandingArgs: IGetIssuerLocaleBrandingArgs = {
1621
+ filter: [
1622
+ {
1623
+ issuerBranding: {
1624
+ id: savedIssuerBranding.id,
1625
+ },
1626
+ locale: 'en-US',
1627
+ },
1628
+ ],
1629
+ }
1630
+
1631
+ const result: Array<IIssuerLocaleBranding> = await issuanceBrandingStore.getIssuerLocaleBranding(getIssuerLocaleBrandingArgs)
1632
+
1633
+ expect(result.length).toEqual(1)
1634
+ })
1635
+
1636
+ it('should update issuer locale branding', async (): Promise<void> => {
1637
+ const issuerBranding: IBasicIssuerBranding = {
1638
+ issuerCorrelationId: 'issuerCorrelationId',
1639
+ localeBranding: [
1640
+ {
1641
+ alias: 'issuerAlias',
1642
+ locale: 'en-US',
1643
+ },
1644
+ {
1645
+ alias: 'issuerAlias',
1646
+ locale: 'en-GB',
1647
+ },
1648
+ ],
1649
+ }
1650
+
1651
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1652
+ expect(savedIssuerBranding).toBeDefined()
1653
+
1654
+ const updateIssuerLocaleBrandingArgs: IUpdateIssuerLocaleBrandingArgs = {
1655
+ localeBranding: {
1656
+ id: savedIssuerBranding.localeBranding[0].id,
1657
+ alias: savedIssuerBranding.localeBranding[0].alias,
1658
+ locale: 'en-NL',
1659
+ },
1660
+ }
1661
+
1662
+ const result: IIssuerLocaleBranding = await issuanceBrandingStore.updateIssuerLocaleBranding(updateIssuerLocaleBrandingArgs)
1663
+
1664
+ expect(result).toBeDefined()
1665
+ })
1666
+
1667
+ it('should throw error when updating issuer branding with duplicate locale', async (): Promise<void> => {
1668
+ const issuerBranding: IBasicIssuerBranding = {
1669
+ issuerCorrelationId: 'issuerCorrelationId',
1670
+ localeBranding: [
1671
+ {
1672
+ alias: 'issuerAlias',
1673
+ locale: 'en-US',
1674
+ },
1675
+ {
1676
+ alias: 'issuerAlias',
1677
+ locale: 'en-GB',
1678
+ },
1679
+ ],
1680
+ }
1681
+
1682
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1683
+ expect(savedIssuerBranding).toBeDefined()
1684
+
1685
+ const locale = 'en-GB'
1686
+ const updateIssuerLocaleBrandingArgs: IUpdateIssuerLocaleBrandingArgs = {
1687
+ localeBranding: {
1688
+ id: savedIssuerBranding.localeBranding[0].id,
1689
+ alias: savedIssuerBranding.localeBranding[0].alias,
1690
+ locale,
1691
+ },
1692
+ }
1693
+
1694
+ await expect(issuanceBrandingStore.updateIssuerLocaleBranding(updateIssuerLocaleBrandingArgs)).rejects.toThrowError(
1695
+ `Issuer branding: ${savedIssuerBranding.id} already contains locale: ${locale}`,
1696
+ )
1697
+ })
1698
+
1699
+ it('should remove issuer locale branding and all children', async (): Promise<void> => {
1700
+ const issuerBranding: IBasicIssuerBranding = {
1701
+ issuerCorrelationId: 'issuerCorrelationId',
1702
+ localeBranding: [
1703
+ {
1704
+ alias: 'issuerAlias',
1705
+ locale: 'en-US',
1706
+ logo: {
1707
+ uri: 'data:image/jpeg;base64,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',
1708
+ mediaType: 'image/jpeg',
1709
+ alt: 'Sphereon logo',
1710
+ dimensions: {
1711
+ width: 200,
1712
+ height: 200,
1713
+ },
1714
+ },
1715
+ description: 'Sphereon credential branding',
1716
+ background: {
1717
+ color: '#7C1010',
1718
+ image: {
1719
+ uri: 'data:image/png;base64,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',
1720
+ alt: 'Sphereon background',
1721
+ mediaType: 'image/png',
1722
+ dimensions: {
1723
+ width: 262,
1724
+ height: 116,
1725
+ },
1726
+ },
1727
+ },
1728
+ text: {
1729
+ color: '#000000',
1730
+ },
1731
+ },
1732
+ ],
1733
+ }
1734
+
1735
+ const savedIssuerBranding: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1736
+ expect(savedIssuerBranding).toBeDefined()
1737
+ const branding: Array<IIssuerBranding> = await issuanceBrandingStore.getIssuerBranding()
1738
+ expect(branding.length).toEqual(1)
1739
+
1740
+ await issuanceBrandingStore.removeIssuerLocaleBranding({ filter: [{ id: savedIssuerBranding.localeBranding[0].id }] })
1741
+
1742
+ // check background image dimensions
1743
+ expect(
1744
+ await dbConnection.getRepository(ImageDimensionsEntity).findOne({
1745
+ where: { id: savedIssuerBranding?.localeBranding[0]?.background?.image?.dimensions?.id },
1746
+ }),
1747
+ ).toBeNull()
1748
+
1749
+ // check background image
1750
+ expect(
1751
+ await dbConnection.getRepository(ImageAttributesEntity).findOne({
1752
+ where: { id: savedIssuerBranding?.localeBranding[0]?.background?.image?.id },
1753
+ }),
1754
+ ).toBeNull()
1755
+
1756
+ // check background
1757
+ expect(
1758
+ await dbConnection.getRepository(BackgroundAttributesEntity).findOne({
1759
+ where: { id: savedIssuerBranding?.localeBranding[0]?.background?.id },
1760
+ }),
1761
+ ).toBeNull()
1762
+
1763
+ // check logo dimensions
1764
+ expect(
1765
+ await dbConnection.getRepository(ImageDimensionsEntity).findOne({
1766
+ where: { id: savedIssuerBranding?.localeBranding[0]?.logo?.dimensions?.id },
1767
+ }),
1768
+ ).toBeNull()
1769
+
1770
+ // check logo
1771
+ expect(
1772
+ await dbConnection.getRepository(ImageAttributesEntity).findOne({
1773
+ where: { id: savedIssuerBranding?.localeBranding[0]?.logo?.id },
1774
+ }),
1775
+ ).toBeNull()
1776
+
1777
+ // check text
1778
+ expect(
1779
+ await dbConnection.getRepository(TextAttributesEntity).findOne({
1780
+ where: { id: savedIssuerBranding?.localeBranding[0]?.text?.id },
1781
+ }),
1782
+ ).toBeNull()
1783
+
1784
+ // check issuer locale branding
1785
+ expect(
1786
+ await dbConnection.getRepository(IssuerLocaleBrandingEntity).findOne({
1787
+ where: { id: savedIssuerBranding?.localeBranding[0]?.id },
1788
+ }),
1789
+ ).toBeNull()
1790
+ })
1791
+
1792
+ it('should show no locale in response when adding issuer branding with no locale', async (): Promise<void> => {
1793
+ const issuerBranding: IBasicIssuerBranding = {
1794
+ issuerCorrelationId: 'issuerCorrelationId',
1795
+ localeBranding: [
1796
+ {
1797
+ alias: 'issuerAlias',
1798
+ },
1799
+ ],
1800
+ }
1801
+
1802
+ const result: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1803
+
1804
+ expect(result).toBeDefined()
1805
+ expect(result?.localeBranding.length).toEqual(1)
1806
+ expect(result?.localeBranding[0].locale).toBeUndefined()
1807
+ })
1808
+
1809
+ it('should show no locale in response when adding issuer locale branding with no locale', async (): Promise<void> => {
1810
+ const issuerBranding: IBasicIssuerBranding = {
1811
+ issuerCorrelationId: 'issuerCorrelationId',
1812
+ localeBranding: [
1813
+ {
1814
+ alias: 'issuerAlias',
1815
+ locale: 'en-US',
1816
+ },
1817
+ ],
1818
+ }
1819
+
1820
+ const fromDb: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1821
+ expect(fromDb).toBeDefined()
1822
+
1823
+ const issuerLocaleBranding: IBasicIssuerLocaleBranding = {
1824
+ alias: 'issuerAlias',
1825
+ }
1826
+
1827
+ const result: IIssuerBranding = await issuanceBrandingStore.addIssuerLocaleBranding({
1828
+ issuerBrandingId: fromDb.id,
1829
+ localeBranding: [issuerLocaleBranding],
1830
+ })
1831
+
1832
+ expect(result).toBeDefined()
1833
+ expect(result?.localeBranding.length).toEqual(2)
1834
+ expect(result?.localeBranding.filter((localeBranding: ICredentialLocaleBranding) => localeBranding.locale === undefined).length).toEqual(1)
1835
+ })
1836
+
1837
+ it('should store blank strings as undefined when adding issuer locale branding', async (): Promise<void> => {
1838
+ const issuerBranding: IBasicIssuerBranding = {
1839
+ issuerCorrelationId: 'issuerCorrelationId',
1840
+ localeBranding: [
1841
+ {
1842
+ alias: '',
1843
+ locale: '',
1844
+ logo: {
1845
+ uri: '',
1846
+ dataUri: '',
1847
+ mediaType: '',
1848
+ alt: '',
1849
+ },
1850
+ description: '',
1851
+ background: {
1852
+ color: '',
1853
+ image: {
1854
+ uri: '',
1855
+ mediaType: '',
1856
+ dataUri: '',
1857
+ alt: '',
1858
+ },
1859
+ },
1860
+ text: {
1861
+ color: '',
1862
+ },
1863
+ },
1864
+ ],
1865
+ }
1866
+
1867
+ const result: IIssuerBranding = await issuanceBrandingStore.addIssuerBranding(issuerBranding)
1868
+
1869
+ expect(result).toBeDefined()
1870
+ expect(result?.localeBranding.length).toEqual(1)
1871
+ expect(result?.localeBranding[0].locale).toBeUndefined()
1872
+ expect(result?.localeBranding[0].alias).toBeUndefined()
1873
+ expect(result?.localeBranding[0].logo!.uri).toBeUndefined()
1874
+ expect(result?.localeBranding[0].logo!.dataUri).toBeUndefined()
1875
+ expect(result?.localeBranding[0].logo!.mediaType).toBeUndefined()
1876
+ expect(result?.localeBranding[0].logo!.alt).toBeUndefined()
1877
+ expect(result?.localeBranding[0].description).toBeUndefined()
1878
+ expect(result?.localeBranding[0].background!.image!.uri).toBeUndefined()
1879
+ expect(result?.localeBranding[0].background!.image!.dataUri).toBeUndefined()
1880
+ expect(result?.localeBranding[0].background!.image!.mediaType).toBeUndefined()
1881
+ expect(result?.localeBranding[0].background!.image!.alt).toBeUndefined()
1882
+ expect(result?.localeBranding[0].text!.color).toBeUndefined()
1883
+ })
1884
+ })