diff --git a/packages/data-access/src/data-access.ts b/packages/data-access/src/data-access.ts index 925f7cd00f..572716d39a 100644 --- a/packages/data-access/src/data-access.ts +++ b/packages/data-access/src/data-access.ts @@ -427,9 +427,12 @@ export default class DataAccess implements DataAccessTypes.IDataAccess { to: synchronizationTo, }); + // Try to get some data previously ignored + const oldEntriesWithMeta = await this.storage.getIgnoredData(); + // check if the data returned by getNewDataId are correct // if yes, the dataIds are indexed with LocationByTopic - await this.pushLocationsWithTopics(newDataWithMeta.entries); + await this.pushLocationsWithTopics(newDataWithMeta.entries.concat(oldEntriesWithMeta)); // The last synced timestamp is the latest one returned by storage this.lastSyncStorageTimestamp = newDataWithMeta.lastTimestamp; diff --git a/packages/data-access/test/data-access.test.ts b/packages/data-access/test/data-access.test.ts index fa1bfed4f5..e50f3fb5fa 100644 --- a/packages/data-access/test/data-access.test.ts +++ b/packages/data-access/test/data-access.test.ts @@ -35,6 +35,10 @@ const transactionDataMock2String = JSON.stringify({ attribut1: 'foo', attribut2: 'bar', }); +const transactionDataMock3String = JSON.stringify({ + attribut1: 'jean', + attribut2: 'bon', +}); const transactionMock1: DataAccessTypes.ITransaction = { data: transactionDataMock1String, @@ -42,6 +46,9 @@ const transactionMock1: DataAccessTypes.ITransaction = { const transactionMock2: DataAccessTypes.ITransaction = { data: transactionDataMock2String, }; +const transactionMock3: DataAccessTypes.ITransaction = { + data: transactionDataMock3String, +}; const arbitraryId1 = '011111111111111111111111111111111111111111111111111111111111111111'; const arbitraryId2 = '012222222222222222222222222222222222222222222222222222222222222222'; @@ -63,6 +70,13 @@ const blockWith2tx = RequestDataAccessBlock.pushTransaction( [arbitraryTopic2], ); +const blockWith1txBis = RequestDataAccessBlock.pushTransaction( + emptyblock, + transactionMock3, + arbitraryId1, + [arbitraryTopic1], +); + const dataIdBlock2tx = 'dataIdBlock2tx'; const getDataResult: StorageTypes.IEntriesWithLastTimestamp = { @@ -76,6 +90,15 @@ const getDataResult: StorageTypes.IEntriesWithLastTimestamp = { lastTimestamp: 0, }; +const dataIdBlock1txBis = 'dataIdBlock1txBis'; +const getIgnoredDataResult: StorageTypes.IEntry[] = [ + { + content: JSON.stringify(blockWith1txBis), + id: dataIdBlock1txBis, + meta: { state: StorageTypes.ContentState.CONFIRMED, timestamp: 1 }, + }, +]; + const appendResult: any = { content: '', id: dataIdBlock2tx, @@ -646,19 +669,16 @@ describe('data-access', () => { }); it('allows to get new transactions after synchronizeNewDataId() call', async () => { - const testData: Promise = Promise.resolve( - getDataResult, - ); - // We create a fakeStorage where getData() called at initialization returns empty structure const fakeStorage = { ...defaultFakeStorage, - getData: (options: any): Promise => { + getData: async (options: any): Promise => { if (!options) { return Promise.resolve(emptyDataResult); } - return testData; + return getDataResult; }, + getIgnoredData: async (): Promise => getIgnoredDataResult, read: (param: string): any => { const dataIdBlock2txFake: StorageTypes.IEntry = { content: JSON.stringify(blockWith2tx), @@ -667,6 +687,7 @@ describe('data-access', () => { }; const result: any = { dataIdBlock2tx: dataIdBlock2txFake, + dataIdBlock1txBis: getIgnoredDataResult[0], }; return result[param]; }, @@ -686,7 +707,7 @@ describe('data-access', () => { result: { transactions: {} }, }); - // Transactions should be available avec synchronization + // Transactions should be available after synchronization await expect(dataAccess.synchronizeNewDataIds()).to.be.fulfilled; expect( @@ -695,9 +716,12 @@ describe('data-access', () => { ).to.deep.equal({ meta: { storageMeta: { - [arbitraryId1]: [{ state: StorageTypes.ContentState.CONFIRMED, timestamp: 1 }], + [arbitraryId1]: [ + { state: StorageTypes.ContentState.CONFIRMED, timestamp: 1 }, + { state: StorageTypes.ContentState.CONFIRMED, timestamp: 1 }, + ], }, - transactionsStorageLocation: { [arbitraryId1]: [dataIdBlock2tx] }, + transactionsStorageLocation: { [arbitraryId1]: [dataIdBlock2tx, dataIdBlock1txBis] }, }, result: { transactions: { @@ -707,22 +731,29 @@ describe('data-access', () => { transaction: transactionMock1, timestamp: 1, }, + { + state: DataAccessTypes.TransactionState.CONFIRMED, + transaction: transactionMock3, + timestamp: 1, + }, ], }, }, }); - expect( await dataAccess.getChannelsByTopic(arbitraryTopic2), 'result with arbitraryTopic2 wrong', ).to.deep.equal({ meta: { storageMeta: { - [arbitraryId1]: [{ state: DataAccessTypes.TransactionState.CONFIRMED, timestamp: 1 }], + [arbitraryId1]: [ + { state: DataAccessTypes.TransactionState.CONFIRMED, timestamp: 1 }, + { state: DataAccessTypes.TransactionState.CONFIRMED, timestamp: 1 }, + ], [arbitraryId2]: [{ state: DataAccessTypes.TransactionState.CONFIRMED, timestamp: 1 }], }, transactionsStorageLocation: { - [arbitraryId1]: [dataIdBlock2tx], + [arbitraryId1]: [dataIdBlock2tx, dataIdBlock1txBis], [arbitraryId2]: [dataIdBlock2tx], }, }, @@ -734,6 +765,11 @@ describe('data-access', () => { transaction: transactionMock1, timestamp: 1, }, + { + state: DataAccessTypes.TransactionState.CONFIRMED, + transaction: transactionMock3, + timestamp: 1, + }, ], [arbitraryId2]: [ {