mirror of
https://github.com/mattermost/mattermost-mobile.git
synced 2026-11-04 09:58:57 +00:00
* Expo-Router partial migration * Full migration to ExpoRouter * i18n * add tests * Merge branch 'main' into expo-router * align package-lock.json * i18n * feedback review * feedback review * android 16kb patch * Refactored emoji picker keyboard using a state machine * set android launch_screen in drawables instead of layout * no conditional hooks * remove duplicate call in test * address feedback * fix tests and address more feedback * small corrections * small corrections * small corrections * fix draft test * fix draft test 2 * remove navigateToScreen in draff test * fix nit in draft test * remove doc file * Feedback review * fix snapshots * improve test coverage * fix i18n * Upgrade t o RN 0.83, other dependencies and new architecture (#9737) * library hardware-keyboard android new arch support fix * library rnshare android new arch support fix * library rnutils android new arch support fix * library secure-pdf-viewer add new arch support * Enable new arch on iOS and Android * update emm and network client with new-arch * update intune to use new-arch * performance improvements * fix tests * fixes post input on new-arch * fix android emoji picker * remove doc * run tests in parallel * upgrade to React Native 0.83.9, Expo 55, React 19, and New Architecture Bumps core dependencies to their latest versions: - React Native 0.77.3 → 0.83.9 (New Architecture enabled) - React 18.3.1 → 19.2.5 - Expo SDK 52 → 55 - TypeScript 5.8.3 → 6.0.3 - Node.js 22.16.0 → 24.15.0 - react-native-reanimated 3.17.3 → 4.3.0 - Various other dependency upgrades Migrates iOS AppDelegate from Objective-C to Swift, updates Android build tooling and Gradle wrapper, refreshes all patches and font assets, and adapts app code, tests, and CI workflows throughout for API changes introduced by these upgrades. * remove unecessary dismissKeyboard in notifications * feedback review * update intune to use new-arch * update @mattermost deps * missing i18n string * additional fixes * update fastlane
126 lines
4.6 KiB
TypeScript
126 lines
4.6 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {cleanup, screen} from '@testing-library/react-native';
|
|
import React from 'react';
|
|
|
|
import {ActionType} from '@constants';
|
|
import {DRAFT_TYPE_DRAFT, DRAFT_TYPE_SCHEDULED} from '@constants/draft';
|
|
import DatabaseManager from '@database/manager';
|
|
import {renderWithEverything} from '@test/intl-test-helper';
|
|
import TestHelper from '@test/test_helper';
|
|
|
|
import DraftScheduledPostOptions from './index';
|
|
|
|
import type {Database} from '@nozbe/watermelondb';
|
|
import type DraftModel from '@typings/database/models/servers/draft';
|
|
import type ScheduledPostModel from '@typings/database/models/servers/scheduled_post';
|
|
|
|
jest.mock('@hooks/device', () => ({
|
|
useIsTablet: jest.fn().mockReturnValue(false),
|
|
}));
|
|
|
|
describe('DraftScheduledPostOptions', () => {
|
|
let database: Database;
|
|
let drafts: DraftModel[] | undefined;
|
|
let scheduled: ScheduledPostModel[] | undefined;
|
|
const baseProps: Parameters<typeof DraftScheduledPostOptions>[0] = {
|
|
draftType: DRAFT_TYPE_DRAFT,
|
|
channelId: 'channel-id',
|
|
rootId: '',
|
|
draftId: 'draft-id',
|
|
draftReceiverUserName: 'username',
|
|
};
|
|
|
|
beforeAll(async () => {
|
|
const server = await TestHelper.setupServerDatabase();
|
|
database = server.database;
|
|
drafts = await server.operator.handleDraft({
|
|
drafts: [{
|
|
channel_id: TestHelper.basicChannel!.id,
|
|
root_id: '',
|
|
message: 'This is a draft message',
|
|
update_at: Date.now(),
|
|
}],
|
|
prepareRecordsOnly: false,
|
|
});
|
|
scheduled = await server.operator.handleScheduledPosts({
|
|
scheduledPosts: [{
|
|
id: 'draft-id',
|
|
channel_id: TestHelper.basicChannel!.id,
|
|
root_id: '',
|
|
message: 'This is a scheduled post message',
|
|
scheduled_at: Date.now() + 3600000, // 1 hour in the future
|
|
update_at: Date.now(),
|
|
create_at: Date.now(),
|
|
user_id: TestHelper.basicUser!.id,
|
|
}],
|
|
actionType: ActionType.SCHEDULED_POSTS.RECEIVED_ALL_SCHEDULED_POSTS,
|
|
prepareRecordsOnly: false,
|
|
});
|
|
});
|
|
|
|
afterEach(async () => {
|
|
cleanup();
|
|
|
|
// Allow observables to settle before next test
|
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await DatabaseManager.destroyServerDatabase('https://appv1.mattermost.com');
|
|
});
|
|
|
|
it('renders draft options correctly', () => {
|
|
renderWithEverything(
|
|
<DraftScheduledPostOptions
|
|
{...baseProps}
|
|
draftId={drafts![0].id}
|
|
channelId={drafts![0].channelId}
|
|
/>, {database},
|
|
);
|
|
|
|
expect(screen.getByText('Draft actions')).toBeTruthy();
|
|
expect(screen.getByText('Copy Text')).toBeTruthy();
|
|
expect(screen.getByTestId('edit_draft')).toBeTruthy();
|
|
expect(screen.getByTestId('send_draft_button')).toBeTruthy();
|
|
expect(screen.getByTestId('delete_draft')).toBeTruthy();
|
|
});
|
|
|
|
it('renders scheduled post options correctly', async () => {
|
|
const scheduledProps = {
|
|
...baseProps,
|
|
channelId: scheduled![0].channelId,
|
|
draftType: DRAFT_TYPE_SCHEDULED,
|
|
draftId: scheduled![0].id,
|
|
scheduledAt: scheduled![0].scheduledAt,
|
|
};
|
|
|
|
renderWithEverything(
|
|
<DraftScheduledPostOptions {...scheduledProps}/>, {database},
|
|
);
|
|
|
|
expect(screen.getByText('Message actions')).toBeTruthy();
|
|
expect(screen.getByText('Copy Text')).toBeTruthy();
|
|
expect(screen.getByTestId('send_draft_button')).toBeTruthy();
|
|
expect(screen.getByTestId('rescheduled_draft')).toBeTruthy();
|
|
expect(screen.getByTestId('delete_draft')).toBeTruthy();
|
|
expect(screen.queryByTestId('edit_draft')).toBeFalsy(); // Edit option should not be present for scheduled posts
|
|
});
|
|
|
|
it('renders tablet view without header', () => {
|
|
jest.requireMock('@hooks/device').useIsTablet.mockReturnValueOnce(true);
|
|
|
|
renderWithEverything(
|
|
<DraftScheduledPostOptions
|
|
{...baseProps}
|
|
draftId={drafts![0].id}
|
|
channelId={drafts![0].channelId}
|
|
/>, {database},
|
|
);
|
|
|
|
expect(screen.queryByText('Draft actions')).toBeTruthy(); // Header should also be present in tablet view
|
|
expect(screen.getByTestId('edit_draft')).toBeTruthy(); // Verify some content is rendered
|
|
});
|
|
});
|