Page MenuHomePhabricator

D11183.id37699.diff
No OneTemporary

D11183.id37699.diff

diff --git a/lib/shared/state-sync/entries-state-sync-spec.js b/lib/shared/state-sync/entries-state-sync-spec.js
--- a/lib/shared/state-sync/entries-state-sync-spec.js
+++ b/lib/shared/state-sync/entries-state-sync-spec.js
@@ -4,6 +4,7 @@
import { createSelector } from 'reselect';
import type { StateSyncSpec, BoundStateSyncSpec } from './state-sync-spec.js';
+import { extractKeyserverIDFromID } from '../../keyserver-conn/keyserver-call-utils.js';
import {
type CalendarQuery,
type RawEntryInfos,
@@ -61,16 +62,24 @@
beforeStateCheck: RawEntryInfos,
afterStateCheck: RawEntryInfos,
) {
+ const keyserverID = action.payload.keyserverID;
+ const filteredBeforeStateCheck = values(beforeStateCheck).filter(
+ entry => entry.id && extractKeyserverIDFromID(entry.id) === keyserverID,
+ );
+ const filteredAfterStateCheck = values(afterStateCheck).filter(
+ entry => entry.id && extractKeyserverIDFromID(entry.id) === keyserverID,
+ );
+
const calendarQuery = action.payload.calendarQuery;
// We don't want to bother reporting an inconsistency if it's just because
// of extraneous EntryInfos (not within the current calendarQuery) on either
// side
const filteredBeforeResult = filterRawEntryInfosByCalendarQuery(
- serverEntryInfosObject(values(beforeStateCheck)),
+ serverEntryInfosObject(filteredBeforeStateCheck),
calendarQuery,
);
const filteredAfterResult = filterRawEntryInfosByCalendarQuery(
- serverEntryInfosObject(values(afterStateCheck)),
+ serverEntryInfosObject(filteredAfterStateCheck),
calendarQuery,
);
if (_isEqual(filteredBeforeResult)(filteredAfterResult)) {
diff --git a/lib/shared/state-sync/entries-state-sync-spec.test.js b/lib/shared/state-sync/entries-state-sync-spec.test.js
new file mode 100644
--- /dev/null
+++ b/lib/shared/state-sync/entries-state-sync-spec.test.js
@@ -0,0 +1,128 @@
+// @flow
+
+import { entriesStateSyncSpec } from './entries-state-sync-spec.js';
+import { processServerRequestsActionType } from '../../types/request-types.js';
+
+jest.mock('../../utils/config.js');
+
+describe('Entries state sync spec', () => {
+ describe('find store inconsistencies', () => {
+ it('should find inconsistencies from the same keyserver', () => {
+ const before = {
+ '256|93372': {
+ id: '256|93372',
+ threadID: '256|84459',
+ text: '123',
+ year: 2022,
+ month: 2,
+ day: 27,
+ creationTime: 1709035016680,
+ creatorID: '84447',
+ deleted: false,
+ },
+ };
+
+ const after = {
+ '256|123': {
+ id: '256|123',
+ threadID: '256|84459',
+ text: '123',
+ year: 2022,
+ month: 2,
+ day: 27,
+ creationTime: 1709035016680,
+ creatorID: '84447',
+ deleted: false,
+ },
+ '256|93372': {
+ id: '256|93372',
+ threadID: '256|84459',
+ text: '123',
+ year: 2022,
+ month: 2,
+ day: 27,
+ creationTime: 1709035016680,
+ creatorID: '84447',
+ deleted: false,
+ },
+ };
+
+ const action = {
+ type: processServerRequestsActionType,
+ payload: {
+ serverRequests: [],
+ calendarQuery: {
+ startDate: '2022-01-01',
+ endDate: '2022-03-01',
+ filters: [],
+ },
+ keyserverID: '256',
+ },
+ };
+
+ expect(
+ entriesStateSyncSpec.findStoreInconsistencies(action, before, after)
+ .length,
+ ).toEqual(1);
+ });
+
+ it('should ignore inconsistencies from different keyservers', () => {
+ const before = {
+ '256|93372': {
+ id: '256|93372',
+ threadID: '256|84459',
+ text: '123',
+ year: 2022,
+ month: 2,
+ day: 27,
+ creationTime: 1709035016680,
+ creatorID: '84447',
+ deleted: false,
+ },
+ };
+
+ const after = {
+ '123|123': {
+ id: '123|123',
+ threadID: '256|84459',
+ text: '123',
+ year: 2022,
+ month: 2,
+ day: 27,
+ creationTime: 1709035016680,
+ creatorID: '84447',
+ deleted: false,
+ },
+ '256|93372': {
+ id: '256|93372',
+ threadID: '256|84459',
+ text: '123',
+ year: 2022,
+ month: 2,
+ day: 27,
+ creationTime: 1709035016680,
+ creatorID: '84447',
+ deleted: false,
+ },
+ };
+
+ const action = {
+ type: processServerRequestsActionType,
+ payload: {
+ serverRequests: [],
+ calendarQuery: {
+ startDate: '2022-01-01',
+ endDate: '2022-03-01',
+ filters: [],
+ },
+ keyserverID: '256',
+ },
+ };
+
+ expect(
+ entriesStateSyncSpec.findStoreInconsistencies(action, before, after)
+ .length,
+ ).toEqual(0);
+ });
+ });
+});
diff --git a/lib/shared/state-sync/threads-state-sync-spec.js b/lib/shared/state-sync/threads-state-sync-spec.js
--- a/lib/shared/state-sync/threads-state-sync-spec.js
+++ b/lib/shared/state-sync/threads-state-sync-spec.js
@@ -1,9 +1,11 @@
// @flow
import _isEqual from 'lodash/fp/isEqual.js';
+import _pickBy from 'lodash/fp/pickBy.js';
import { createSelector } from 'reselect';
import type { StateSyncSpec, BoundStateSyncSpec } from './state-sync-spec.js';
+import { extractKeyserverIDFromID } from '../../keyserver-conn/keyserver-call-utils.js';
import type { RawThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js';
import type { AppState } from '../../types/redux-types.js';
import {
@@ -60,7 +62,13 @@
beforeStateCheck: MixedRawThreadInfos,
afterStateCheck: MixedRawThreadInfos,
) {
- if (_isEqual(beforeStateCheck)(afterStateCheck)) {
+ const keyserverID = action.payload.keyserverID;
+ const filter = _pickBy(
+ thread => extractKeyserverIDFromID(thread.id) === keyserverID,
+ );
+ const filteredBeforeStateCheck = filter(beforeStateCheck);
+ const filteredAfterStateCheck = filter(afterStateCheck);
+ if (_isEqual(filteredBeforeStateCheck)(filteredAfterStateCheck)) {
return emptyArray;
}
return [
diff --git a/lib/shared/state-sync/threads-state-sync-spec.test.js b/lib/shared/state-sync/threads-state-sync-spec.test.js
new file mode 100644
--- /dev/null
+++ b/lib/shared/state-sync/threads-state-sync-spec.test.js
@@ -0,0 +1,217 @@
+// @flow
+
+import { threadsStateSyncSpec } from './threads-state-sync-spec.js';
+import { defaultCalendarQuery } from '../../types/entry-types.js';
+import { processServerRequestsActionType } from '../../types/request-types.js';
+import { threadTypes } from '../../types/thread-types-enum.js';
+import { getConfig } from '../../utils/config.js';
+
+jest.mock('../../utils/config.js');
+
+describe('Threads state sync spec', () => {
+ describe('find store inconsistencies', () => {
+ it('should find inconsistencies from the same keyserver', () => {
+ const before = {
+ '256|84459': {
+ minimallyEncoded: true,
+ id: '256|84459',
+ type: threadTypes.PRIVATE,
+ name: '',
+ description: '',
+ color: 'b8753d',
+ creationTime: 3663,
+ parentThreadID: '256|1',
+ containingThreadID: '256|1',
+ community: '256|1',
+ members: [],
+ roles: {},
+ currentUser: {
+ role: '256|84460',
+ permissions: '3026f',
+ subscription: {
+ home: true,
+ pushNotifs: true,
+ },
+ unread: false,
+ minimallyEncoded: true,
+ },
+ repliesCount: 0,
+ pinnedCount: 0,
+ },
+ };
+
+ const after = {
+ '256|84459': {
+ minimallyEncoded: true,
+ id: '256|84459',
+ type: threadTypes.PRIVATE,
+ name: '',
+ description: '',
+ color: 'b8753d',
+ creationTime: 3663,
+ parentThreadID: '256|1',
+ containingThreadID: '256|1',
+ community: '256|1',
+ members: [],
+ roles: {},
+ currentUser: {
+ role: '256|84460',
+ permissions: '3026f',
+ subscription: {
+ home: true,
+ pushNotifs: true,
+ },
+ unread: false,
+ minimallyEncoded: true,
+ },
+ repliesCount: 0,
+ pinnedCount: 0,
+ },
+ '256|123': {
+ minimallyEncoded: true,
+ id: '256|123',
+ type: threadTypes.PRIVATE,
+ name: '',
+ description: '',
+ color: 'b8753d',
+ creationTime: 3663,
+ parentThreadID: '256|1',
+ containingThreadID: '256|1',
+ community: '256|1',
+ members: [],
+ roles: {},
+ currentUser: {
+ role: '256|84460',
+ permissions: '3026f',
+ subscription: {
+ home: true,
+ pushNotifs: true,
+ },
+ unread: false,
+ minimallyEncoded: true,
+ },
+ repliesCount: 0,
+ pinnedCount: 0,
+ },
+ };
+
+ const action = {
+ type: processServerRequestsActionType,
+ payload: {
+ serverRequests: [],
+ calendarQuery: defaultCalendarQuery(
+ getConfig().platformDetails.platform,
+ ),
+ keyserverID: '256',
+ },
+ };
+
+ expect(
+ threadsStateSyncSpec.findStoreInconsistencies(action, before, after)
+ .length,
+ ).toEqual(1);
+ });
+
+ it('should ignore inconsistencies from different keyservers', () => {
+ const before = {
+ '256|84459': {
+ minimallyEncoded: true,
+ id: '256|84459',
+ type: threadTypes.PRIVATE,
+ name: '',
+ description: '',
+ color: 'b8753d',
+ creationTime: 3663,
+ parentThreadID: '256|1',
+ containingThreadID: '256|1',
+ community: '256|1',
+ members: [],
+ roles: {},
+ currentUser: {
+ role: '256|84460',
+ permissions: '3026f',
+ subscription: {
+ home: true,
+ pushNotifs: true,
+ },
+ unread: false,
+ minimallyEncoded: true,
+ },
+ repliesCount: 0,
+ pinnedCount: 0,
+ },
+ };
+
+ const after = {
+ '256|84459': {
+ minimallyEncoded: true,
+ id: '256|84459',
+ type: threadTypes.PRIVATE,
+ name: '',
+ description: '',
+ color: 'b8753d',
+ creationTime: 3663,
+ parentThreadID: '256|1',
+ containingThreadID: '256|1',
+ community: '256|1',
+ members: [],
+ roles: {},
+ currentUser: {
+ role: '256|84460',
+ permissions: '3026f',
+ subscription: {
+ home: true,
+ pushNotifs: true,
+ },
+ unread: false,
+ minimallyEncoded: true,
+ },
+ repliesCount: 0,
+ pinnedCount: 0,
+ },
+ '123|123': {
+ minimallyEncoded: true,
+ id: '123|123',
+ type: threadTypes.PRIVATE,
+ name: '',
+ description: '',
+ color: 'b8753d',
+ creationTime: 3663,
+ parentThreadID: '256|1',
+ containingThreadID: '256|1',
+ community: '256|1',
+ members: [],
+ roles: {},
+ currentUser: {
+ role: '256|84460',
+ permissions: '3026f',
+ subscription: {
+ home: true,
+ pushNotifs: true,
+ },
+ unread: false,
+ minimallyEncoded: true,
+ },
+ repliesCount: 0,
+ pinnedCount: 0,
+ },
+ };
+
+ const action = {
+ type: processServerRequestsActionType,
+ payload: {
+ serverRequests: [],
+ calendarQuery: defaultCalendarQuery(
+ getConfig().platformDetails.platform,
+ ),
+ keyserverID: '256',
+ },
+ };
+
+ expect(
+ threadsStateSyncSpec.findStoreInconsistencies(action, before, after)
+ .length,
+ ).toEqual(0);
+ });
+ });
+});

File Metadata

Mime Type
text/plain
Expires
Mon, Sep 30, 9:57 PM (19 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2207577
Default Alt Text
D11183.id37699.diff (12 KB)

Event Timeline