import assert from 'assert'; import React from 'react'; // jshint ignore:line import SubscriptionMenu from 'misago/components/threads-list/thread/subscription/options'; // jshint ignore:line import modal from 'misago/services/modal'; import snackbar from 'misago/services/snackbar'; import Store from 'misago/services/store'; import * as testUtils from 'misago/utils/test-utils'; let snackbarStore = null; const thread = { id: 123, api_url: '/test-api/threads/1321/', subscription: null }; describe("Threads List Subscription Options", function() { beforeEach(function() { snackbarStore = testUtils.snackbarStoreMock(); snackbar.init(snackbarStore); testUtils.initModal(modal); }); afterEach(function() { testUtils.unmountComponents(); testUtils.snackbarClear(snackbar); $.mockjax.clear(); }); it("handles backend error", function(done) { Store._store = { dispatch: function(action) { this.action = action; } }; $.mockjax({ url: thread.api_url, status: 500 }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ testUtils.simulateClick('#test-mount button:eq(2)'); window.setTimeout(function() { assert.deepEqual(Store._store.action, { type: 'PATCH_THREAD', thread: { id: 123, api_url: '/test-api/threads/1321/', subscription: null }, patch: { subscription: null }, sorting: null }, "action was set on store"); assert.deepEqual(snackbarStore.message, { message: 'Unknown error has occured.', type: 'error' }); done(); }, 300); }); it("unsubscribes thread", function(done) { Store._store = { dispatch: function(action) { this.action = action; } }; $.mockjax({ url: thread.api_url, status: 200, responseText: { subscription: null } }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ testUtils.simulateClick('#test-mount button:eq(0)'); window.setTimeout(function() { assert.deepEqual(Store._store.action, { type: 'PATCH_THREAD', thread: { id: 123, api_url: '/test-api/threads/1321/', subscription: null }, patch: { subscription: null }, sorting: null }, "action was set on store"); done(); }, 300); }); it("subscribes thread", function(done) { Store._store = { dispatch: function(action) { this.action = action; } }; $.mockjax({ url: thread.api_url, status: 200, responseText: { subscription: false } }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ testUtils.simulateClick('#test-mount button:eq(1)'); window.setTimeout(function() { assert.deepEqual(Store._store.action, { type: 'PATCH_THREAD', thread: { id: 123, api_url: '/test-api/threads/1321/', subscription: null }, patch: { subscription: false }, sorting: null }, "action was set on store"); done(); }, 300); }); it("subscribes thread with email", function(done) { Store._store = { dispatch: function(action) { this.action = action; } }; $.mockjax({ url: thread.api_url, status: 200, responseText: { subscription: true } }); /* jshint ignore:start */ testUtils.render(); /* jshint ignore:end */ testUtils.simulateClick('#test-mount button:eq(2)'); window.setTimeout(function() { assert.deepEqual(Store._store.action, { type: 'PATCH_THREAD', thread: { id: 123, api_url: '/test-api/threads/1321/', subscription: null }, patch: { subscription: true }, sorting: null }, "action was set on store"); done(); }, 300); }); });