Skip to content

Commit

Permalink
feat: Save failed to send data in DB (#14823)
Browse files Browse the repository at this point in the history
  • Loading branch information
atomrc committed Mar 13, 2023
1 parent 23d0231 commit 74a9e44
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 25 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"@emotion/react": "11.10.6",
"@types/eslint": "8.4.10",
"@wireapp/avs": "9.1.11",
"@wireapp/core": "39.1.6",
"@wireapp/core": "39.2.0",
"@wireapp/lru-cache": "3.8.1",
"@wireapp/react-ui-kit": "9.4.0",
"@wireapp/store-engine-dexie": "2.0.4",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ describe('PartialFailureToSendWarning', () => {
const nbUsers = Math.floor(Math.random() * 100);
const users = generateUsers(nbUsers, 'domain');

const failedToSend = generateUserClients(users);
const {container} = render(withTheme(<PartialFailureToSendWarning knownUsers={[]} failedToSend={failedToSend} />));
const queued = generateUserClients(users);
const {container} = render(withTheme(<PartialFailureToSendWarning knownUsers={[]} failedToSend={{queued}} />));
expect(container.textContent).toContain(`${nbUsers} Participants had issues receiving this message`);
});

Expand All @@ -62,30 +62,30 @@ describe('PartialFailureToSendWarning', () => {
const users1 = generateUsers(nbUsersDomain1, 'domain1');
const users2 = generateUsers(nbUsersDomain2, 'domain2');

const failedToSend = {
const queued = {
...generateUserClients(users1),
...generateUserClients(users2),
};
const {container} = render(withTheme(<PartialFailureToSendWarning knownUsers={[]} failedToSend={failedToSend} />));
const {container} = render(withTheme(<PartialFailureToSendWarning knownUsers={[]} failedToSend={{queued}} />));
expect(container.textContent).toContain(
`${nbUsersDomain1 + nbUsersDomain2} Participants had issues receiving this message`,
);
});

it('does not show the extra info toggle if there is only a single user', () => {
const users = generateUsers(1, 'domain');
const failedToSend = generateUserClients(users);
const queued = generateUserClients(users);
const {queryByText, container} = render(
withTheme(<PartialFailureToSendWarning knownUsers={users} failedToSend={failedToSend} />),
withTheme(<PartialFailureToSendWarning knownUsers={users} failedToSend={{queued}} />),
);

expect(queryByText('Show details')).toBeNull();
expect(container.textContent).toContain(`${users[0].username()} will receive your message later`);
});

it('toggles the extra info', () => {
const failedToSend = generateUserClients(generateUsers(2, 'domain'));
const {getByText} = render(withTheme(<PartialFailureToSendWarning knownUsers={[]} failedToSend={failedToSend} />));
const queued = generateUserClients(generateUsers(2, 'domain'));
const {getByText} = render(withTheme(<PartialFailureToSendWarning knownUsers={[]} failedToSend={{queued}} />));

act(() => {
getByText('Show details').click();
Expand All @@ -104,9 +104,9 @@ describe('PartialFailureToSendWarning', () => {
const nbUsers = Math.floor(Math.random() * 10) + 2;
const users = generateUsers(nbUsers, 'domain');

const failedToSend = generateUserClients(users);
const queued = generateUserClients(users);
const {getByText, getAllByTestId} = render(
withTheme(<PartialFailureToSendWarning knownUsers={users} failedToSend={failedToSend} />),
withTheme(<PartialFailureToSendWarning knownUsers={users} failedToSend={{queued}} />),
);

act(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import {warning} from '../Warnings.styles';

export type User = {qualifiedId: QualifiedId; username: () => string};
type Props = {
failedToSend: QualifiedUserClients;
failedToSend: {queued?: QualifiedUserClients; failed?: QualifiedId[]};
knownUsers: User[];
};

Expand Down Expand Up @@ -62,15 +62,13 @@ function generateNamedUsers(users: User[], userClients: QualifiedUserClients): P

export const PartialFailureToSendWarning = ({failedToSend, knownUsers}: Props) => {
const [isOpen, setIsOpen] = useState(false);
const {queued = {}} = failedToSend;

const userCount = Object.entries(failedToSend).reduce(
(count, [_domain, users]) => count + Object.keys(users).length,
0,
);
const userCount = Object.entries(queued).reduce((count, [_domain, users]) => count + Object.keys(users).length, 0);

const showToggle = userCount > 1;

const {namedUsers} = generateNamedUsers(knownUsers, failedToSend);
const {namedUsers} = generateNamedUsers(knownUsers, queued);

const message =
namedUsers.length === 1
Expand Down
2 changes: 1 addition & 1 deletion src/script/conversation/MessageRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1109,7 +1109,7 @@ export class MessageRepository {
conversationEntity: Conversation,
eventId: string,
isoDate?: string,
failedToSend?: QualifiedUserClients,
failedToSend?: SendResult['failedToSend'],
) {
try {
const messageEntity = await this.getMessageInConversationById(conversationEntity, eventId);
Expand Down
3 changes: 2 additions & 1 deletion src/script/entity/message/ContentMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ export class ContentMessage extends Message {
public readonly is_liked: ko.PureComputed<boolean>;
public readonly like_caption: ko.PureComputed<string>;
public readonly other_likes: ko.PureComputed<User[]>;
public readonly failedToSend: ko.Observable<QualifiedUserClients | undefined> = ko.observable();
public readonly failedToSend: ko.Observable<{queued?: QualifiedUserClients; failed?: QualifiedId[]} | undefined> =
ko.observable();
public readonly quote: ko.Observable<QuoteEntity>;
// TODO: Rename to `reactionsUsers`
public readonly reactions_user_ids: ko.PureComputed<string>;
Expand Down
5 changes: 4 additions & 1 deletion src/script/storage/record/EventRecord.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,10 @@ export type UserReactionMap = {[userId: string]: ReactionType};
type SentEvent = {
/** sending status of the event*/
status: StatusType;
failedToSend?: QualifiedUserClients;
failedToSend?: {
queue?: QualifiedUserClients;
failed?: QualifiedId[];
};
};

/** represents an event that was saved to the DB */
Expand Down
18 changes: 13 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4811,9 +4811,9 @@ __metadata:
languageName: node
linkType: hard

"@wireapp/core@npm:39.1.6":
version: 39.1.6
resolution: "@wireapp/core@npm:39.1.6"
"@wireapp/core@npm:39.2.0":
version: 39.2.0
resolution: "@wireapp/core@npm:39.2.0"
dependencies:
"@wireapp/api-client": ^23.1.3
"@wireapp/commons": ^5.0.4
Expand All @@ -4825,13 +4825,14 @@ __metadata:
"@wireapp/store-engine-dexie": ^2.0.5
axios: 1.3.4
bazinga64: 6.0.4
deepmerge-ts: 4.3.0
hash.js: 1.1.7
http-status-codes: 2.2.0
idb: 7.1.1
logdown: 3.3.1
long: ^5.2.0
uuidjs: 4.2.13
checksum: 7de3e325da60e49fd204986aedc7731b763f998de30a6c9ceef0e03b57a74d6b988b32e2977b8d9e0e56c6102bf2931f07a48913e4123021ea21504b314b43de
checksum: 676f98d206e643a67dc24bd3be8ae39f1949e1c944695c902f67c46f0b970fd8bd468d15373cbaa4846ea6343213c409d7eb5f6343904415c61ad85fecf3f8ba
languageName: node
linkType: hard

Expand Down Expand Up @@ -7206,6 +7207,13 @@ __metadata:
languageName: node
linkType: hard

"deepmerge-ts@npm:4.3.0":
version: 4.3.0
resolution: "deepmerge-ts@npm:4.3.0"
checksum: d5f8a96df9a2bc7177d59544b9390ba76e50fb725f776669068ca04eef319e98ee8870cf7b7ecca9f636b711d57cea571ac61553ee01101a614c045f7a86e0be
languageName: node
linkType: hard

"deepmerge@npm:^4.0.0, deepmerge@npm:^4.2.2":
version: 4.2.2
resolution: "deepmerge@npm:4.2.2"
Expand Down Expand Up @@ -17518,7 +17526,7 @@ __metadata:
"@typescript-eslint/parser": ^5.54.1
"@wireapp/avs": 9.1.11
"@wireapp/copy-config": 2.0.10
"@wireapp/core": 39.1.6
"@wireapp/core": 39.2.0
"@wireapp/eslint-config": 2.1.1
"@wireapp/lru-cache": 3.8.1
"@wireapp/prettier-config": 0.5.2
Expand Down

0 comments on commit 74a9e44

Please sign in to comment.