Skip to content

Commit c5f69f5

Browse files
authored
task: add nullish coalescing operator to handle undefine meta properties #843
1 parent 6d9df5e commit c5f69f5

File tree

2 files changed

+61
-19
lines changed

2 files changed

+61
-19
lines changed

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ const extractTransactionMeta = (meta: any, id: string): TransactionInfo | Aggreg
122122
UInt64.fromNumericString(meta.height),
123123
meta.index,
124124
id,
125-
UInt64.fromNumericString(meta.timestamp),
126-
meta.feeMultiplier,
125+
UInt64.fromNumericString(meta.timestamp ?? '0'),
126+
meta.feeMultiplier ?? 0,
127127
meta.aggregateHash,
128128
meta.aggregateId,
129129
);
@@ -132,8 +132,8 @@ const extractTransactionMeta = (meta: any, id: string): TransactionInfo | Aggreg
132132
UInt64.fromNumericString(meta.height),
133133
meta.index,
134134
id,
135-
UInt64.fromNumericString(meta.timestamp),
136-
meta.feeMultiplier,
135+
UInt64.fromNumericString(meta.timestamp ?? '0'),
136+
meta.feeMultiplier ?? 0,
137137
meta.hash,
138138
meta.merkleComponentHash,
139139
);

test/infrastructure/TransactionHttp.spec.ts

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@ describe('TransactionHttp', () => {
101101
metaDto.hash = 'hash';
102102
metaDto.height = '1';
103103
metaDto.index = 0;
104-
metaDto.timestamp = '0';
105-
metaDto.feeMultiplier = 0;
106104
metaDto.merkleComponentHash = 'merkleHash';
107105

108106
const transactionDto = {} as TransferTransactionDTO;
@@ -139,7 +137,22 @@ describe('TransactionHttp', () => {
139137
undefined,
140138
undefined,
141139
),
142-
).thenReturn(Promise.resolve(page));
140+
).thenReturn(
141+
Promise.resolve({
142+
data: [
143+
{
144+
id: 'id',
145+
meta: {
146+
...metaDto,
147+
feeMultiplier: 100,
148+
timestamp: '1000',
149+
},
150+
transaction: transactionDto,
151+
},
152+
],
153+
pagination: paginationDto,
154+
}),
155+
);
143156

144157
when(
145158
transactionRoutesApi.searchPartialTransactions(
@@ -188,8 +201,8 @@ describe('TransactionHttp', () => {
188201
expect(((transactions.data[0] as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
189202
expect(transactions.data[0].transactionInfo?.id).to.be.equal('id');
190203
expect(transactions.data[0].transactionInfo?.hash).to.be.equal('hash');
191-
expect(transactions.data[0].transactionInfo?.timestamp?.toString()).to.be.equal('0');
192-
expect(transactions.data[0].transactionInfo?.feeMultiplier).to.be.equal(0);
204+
expect(transactions.data[0].transactionInfo?.timestamp?.toString()).to.be.equal('1000');
205+
expect(transactions.data[0].transactionInfo?.feeMultiplier).to.be.equal(100);
193206

194207
expect(transactions.pageNumber).to.be.equal(1);
195208
expect(transactions.pageSize).to.be.equal(1);
@@ -201,6 +214,8 @@ describe('TransactionHttp', () => {
201214
expect(((transactions.data[0] as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
202215
expect(transactions.data[0].transactionInfo?.id).to.be.equal('id');
203216
expect(transactions.data[0].transactionInfo?.hash).to.be.equal('hash');
217+
expect(transactions.data[0].transactionInfo?.timestamp?.toString()).to.be.equal('0');
218+
expect(transactions.data[0].transactionInfo?.feeMultiplier).to.be.equal(0);
204219

205220
expect(transactions.pageNumber).to.be.equal(1);
206221
expect(transactions.pageSize).to.be.equal(1);
@@ -212,6 +227,8 @@ describe('TransactionHttp', () => {
212227
expect(((transactions.data[0] as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
213228
expect(transactions.data[0].transactionInfo?.id).to.be.equal('id');
214229
expect(transactions.data[0].transactionInfo?.hash).to.be.equal('hash');
230+
expect(transactions.data[0].transactionInfo?.timestamp?.toString()).to.be.equal('0');
231+
expect(transactions.data[0].transactionInfo?.feeMultiplier).to.be.equal(0);
215232

216233
expect(transactions.pageNumber).to.be.equal(1);
217234
expect(transactions.pageSize).to.be.equal(1);
@@ -223,8 +240,6 @@ describe('TransactionHttp', () => {
223240
metaDto.hash = 'hash';
224241
metaDto.height = '1';
225242
metaDto.index = 0;
226-
metaDto.timestamp = '0';
227-
metaDto.feeMultiplier = 0;
228243
metaDto.merkleComponentHash = 'merkleHash';
229244

230245
const transactionDto = {} as TransferTransactionDTO;
@@ -240,7 +255,17 @@ describe('TransactionHttp', () => {
240255
transactionInfoDto.meta = metaDto;
241256
transactionInfoDto.transaction = transactionDto;
242257

243-
when(transactionRoutesApi.getConfirmedTransaction(generationHash)).thenReturn(Promise.resolve(transactionInfoDto));
258+
when(transactionRoutesApi.getConfirmedTransaction(generationHash)).thenReturn(
259+
Promise.resolve({
260+
id: 'id',
261+
meta: {
262+
...metaDto,
263+
feeMultiplier: 100,
264+
timestamp: '1000',
265+
},
266+
transaction: transactionDto,
267+
}),
268+
);
244269

245270
when(transactionRoutesApi.getPartialTransaction(generationHash)).thenReturn(Promise.resolve(transactionInfoDto));
246271
when(transactionRoutesApi.getUnconfirmedTransaction(generationHash)).thenReturn(Promise.resolve(transactionInfoDto));
@@ -251,21 +276,26 @@ describe('TransactionHttp', () => {
251276
expect(((transaction as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
252277
expect(transaction.transactionInfo?.id).to.be.equal('id');
253278
expect(transaction.transactionInfo?.hash).to.be.equal('hash');
254-
expect(transaction.transactionInfo?.timestamp?.toString()).to.be.equal('0');
255-
expect(transaction.transactionInfo?.feeMultiplier).to.be.equal(0);
279+
expect(transaction.transactionInfo?.timestamp?.toString()).to.be.equal('1000');
280+
expect(transaction.transactionInfo?.feeMultiplier).to.be.equal(100);
256281

257282
transaction = await firstValueFrom(transactionHttp.getTransaction(generationHash, TransactionGroup.Partial));
258283

259284
expect(transaction.type.valueOf()).to.be.equal(TransactionType.TRANSFER.valueOf());
260285
expect(((transaction as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
261286
expect(transaction.transactionInfo?.id).to.be.equal('id');
262287
expect(transaction.transactionInfo?.hash).to.be.equal('hash');
288+
expect(transaction.transactionInfo?.timestamp?.toString()).to.be.equal('0');
289+
expect(transaction.transactionInfo?.feeMultiplier).to.be.equal(0);
290+
263291
transaction = await firstValueFrom(transactionHttp.getTransaction(generationHash, TransactionGroup.Unconfirmed));
264292

265293
expect(transaction.type.valueOf()).to.be.equal(TransactionType.TRANSFER.valueOf());
266294
expect(((transaction as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
267295
expect(transaction.transactionInfo?.id).to.be.equal('id');
268296
expect(transaction.transactionInfo?.hash).to.be.equal('hash');
297+
expect(transaction.transactionInfo?.timestamp?.toString()).to.be.equal('0');
298+
expect(transaction.transactionInfo?.feeMultiplier).to.be.equal(0);
269299
});
270300

271301
it('Test getTransactionsById method', async () => {
@@ -274,8 +304,6 @@ describe('TransactionHttp', () => {
274304
metaDto.hash = 'hash';
275305
metaDto.height = '1';
276306
metaDto.index = 0;
277-
metaDto.timestamp = '0';
278-
metaDto.feeMultiplier = 0;
279307
metaDto.merkleComponentHash = 'merkleHash';
280308

281309
const transactionDto = {} as TransferTransactionDTO;
@@ -292,7 +320,17 @@ describe('TransactionHttp', () => {
292320
transactionInfoDto.transaction = transactionDto;
293321

294322
when(transactionRoutesApi.getConfirmedTransactions(deepEqual({ transactionIds: [generationHash] }))).thenReturn(
295-
Promise.resolve([transactionInfoDto]),
323+
Promise.resolve([
324+
{
325+
id: 'id',
326+
meta: {
327+
...metaDto,
328+
feeMultiplier: 100,
329+
timestamp: '1000',
330+
},
331+
transaction: transactionDto,
332+
},
333+
]),
296334
);
297335

298336
const transactionConfirmed = await firstValueFrom(
@@ -318,20 +356,24 @@ describe('TransactionHttp', () => {
318356
expect(((transactionConfirmed[0] as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
319357
expect(transactionConfirmed[0].transactionInfo?.id).to.be.equal('id');
320358
expect(transactionConfirmed[0].transactionInfo?.hash).to.be.equal('hash');
321-
expect(transactionConfirmed[0].transactionInfo?.timestamp?.toString()).to.be.equal('0');
322-
expect(transactionConfirmed[0].transactionInfo?.feeMultiplier).to.be.equal(0);
359+
expect(transactionConfirmed[0].transactionInfo?.timestamp?.toString()).to.be.equal('1000');
360+
expect(transactionConfirmed[0].transactionInfo?.feeMultiplier).to.be.equal(100);
323361

324362
expect(transactionUnconfirmed.length).to.be.equal(1);
325363
expect(transactionUnconfirmed[0].type.valueOf()).to.be.equal(TransactionType.TRANSFER.valueOf());
326364
expect(((transactionUnconfirmed[0] as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
327365
expect(transactionUnconfirmed[0].transactionInfo?.id).to.be.equal('id');
328366
expect(transactionUnconfirmed[0].transactionInfo?.hash).to.be.equal('hash');
367+
expect(transactionUnconfirmed[0].transactionInfo?.timestamp?.toString()).to.be.equal('0');
368+
expect(transactionUnconfirmed[0].transactionInfo?.feeMultiplier).to.be.equal(0);
329369

330370
expect(transactionPartial.length).to.be.equal(1);
331371
expect(transactionPartial[0].type.valueOf()).to.be.equal(TransactionType.TRANSFER.valueOf());
332372
expect(((transactionPartial[0] as TransferTransaction).recipientAddress as Address).plain()).to.be.equal(TestAddress.plain());
333373
expect(transactionPartial[0].transactionInfo?.id).to.be.equal('id');
334374
expect(transactionPartial[0].transactionInfo?.hash).to.be.equal('hash');
375+
expect(transactionPartial[0].transactionInfo?.timestamp?.toString()).to.be.equal('0');
376+
expect(transactionPartial[0].transactionInfo?.feeMultiplier).to.be.equal(0);
335377
});
336378

337379
it('Test getEffectiveFees method', async () => {

0 commit comments

Comments
 (0)