UNPKG

mattermost-redux

Version:

Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client

124 lines (96 loc) 5.34 kB
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import fs from 'fs'; import assert from 'assert'; import nock from 'nock'; import * as Actions from 'actions/files'; import {Client4} from 'client'; import {RequestStatus} from '../constants'; import TestHelper from 'test/test_helper'; import configureStore from 'test/test_store'; const FormData = require('form-data'); describe('Actions.Files', () => { let store; beforeAll(async () => { await TestHelper.initBasic(Client4); }); beforeEach(async () => { store = await configureStore(); }); afterAll(async () => { await TestHelper.tearDown(); }); it('uploadFile', async () => { const {basicChannel} = TestHelper; const testFileName = 'test.png'; const testImageData = fs.createReadStream(`test/assets/images/${testFileName}`); const clientId = TestHelper.generateId(); const imageFormData = new FormData(); imageFormData.append('files', testImageData); imageFormData.append('channel_id', basicChannel.id); imageFormData.append('client_ids', clientId); const formBoundary = imageFormData.getBoundary(); nock(Client4.getBaseRoute()). post('/files'). reply(201, {file_infos: [{id: TestHelper.generateId(), user_id: TestHelper.basicUser.id, create_at: 1507921547541, update_at: 1507921547541, delete_at: 0, name: 'test.png', extension: 'png', size: 258428, mime_type: 'image/png', width: 600, height: 600, has_preview_image: true}], client_ids: [TestHelper.generateId()]}); await Actions.uploadFile(basicChannel.id, null, [clientId], imageFormData, formBoundary)(store.dispatch, store.getState); const state = store.getState(); const uploadRequest = state.requests.files.uploadFiles; if (uploadRequest.status === RequestStatus.FAILURE) { throw uploadRequest.error; } const files = state.entities.files.files; const file = Object.keys(files).find((f) => files[f].name === testFileName); assert.ok(file, 'Could not find uploaded file.'); }); it('getFilesForPost', async () => { const {basicClient4, basicChannel} = TestHelper; const testFileName = 'test.png'; const testImageData = fs.createReadStream(`test/assets/images/${testFileName}`); const clientId = TestHelper.generateId(); const imageFormData = new FormData(); imageFormData.append('files', testImageData); imageFormData.append('channel_id', basicChannel.id); imageFormData.append('client_ids', clientId); const formBoundary = imageFormData.getBoundary(); nock(Client4.getBaseRoute()). post('/files'). reply(201, {file_infos: [{id: TestHelper.generateId(), user_id: TestHelper.basicUser.id, create_at: 1507921547541, update_at: 1507921547541, delete_at: 0, name: 'test.png', extension: 'png', size: 258428, mime_type: 'image/png', width: 600, height: 600, has_preview_image: true}], client_ids: [TestHelper.generateId()]}); const fileUploadResp = await basicClient4. uploadFile(imageFormData, formBoundary); const fileId = fileUploadResp.file_infos[0].id; const fakePostForFile = TestHelper.fakePost(basicChannel.id); fakePostForFile.file_ids = [fileId]; nock(Client4.getBaseRoute()). post('/posts'). reply(201, {...TestHelper.fakePostWithId(), ...fakePostForFile}); const postForFile = await basicClient4.createPost(fakePostForFile); nock(Client4.getBaseRoute()). get(`/posts/${postForFile.id}/files/info`). reply(200, [{id: fileId, user_id: TestHelper.basicUser.id, create_at: 1507921547541, update_at: 1507921547541, delete_at: 0, name: 'test.png', extension: 'png', size: 258428, mime_type: 'image/png', width: 600, height: 600, has_preview_image: true}]); await Actions.getFilesForPost(postForFile.id)(store.dispatch, store.getState); const {files: allFiles, fileIdsByPostId} = store.getState().entities.files; assert.ok(allFiles); assert.ok(allFiles[fileId]); assert.equal(allFiles[fileId].id, fileId); assert.equal(allFiles[fileId].name, testFileName); assert.ok(fileIdsByPostId); assert.ok(fileIdsByPostId[postForFile.id]); assert.equal(fileIdsByPostId[postForFile.id][0], fileId); }); it('getFilePublicLink', async () => { const fileId = 't1izsr9uspgi3ynggqu6xxjn9y'; nock(Client4.getBaseRoute()). get(`/files/${fileId}/link`). query(true). reply(200, { link: 'https://mattermost.com/files/ndans23ry2rtjd1z73g6i5f3fc/public?h=rE1-b2N1VVVMsAQssjwlfNawbVOwUy1TRDuTeGC_tys', }); await Actions.getFilePublicLink(fileId)(store.dispatch, store.getState); const state = store.getState(); const filePublicLink = state.entities.files.filePublicLink.link; assert.equal('https://mattermost.com/files/ndans23ry2rtjd1z73g6i5f3fc/public?h=rE1-b2N1VVVMsAQssjwlfNawbVOwUy1TRDuTeGC_tys', filePublicLink); assert.ok(filePublicLink); assert.ok(filePublicLink.length > 0); }); });