summaryrefslogtreecommitdiff
path: root/spec/frontend/diff_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/diff_spec.js')
-rw-r--r--spec/frontend/diff_spec.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/spec/frontend/diff_spec.js b/spec/frontend/diff_spec.js
new file mode 100644
index 00000000000..759ae32ac51
--- /dev/null
+++ b/spec/frontend/diff_spec.js
@@ -0,0 +1,72 @@
+import createEventHub from '~/helpers/event_hub_factory';
+
+import Diff from '~/diff';
+
+describe('Diff', () => {
+ describe('diff <-> tabs interactions', () => {
+ let hub;
+
+ beforeEach(() => {
+ hub = createEventHub();
+ });
+
+ describe('constructor', () => {
+ it("takes in the `mergeRequestEventHub` when it's provided", () => {
+ const diff = new Diff({ mergeRequestEventHub: hub });
+
+ expect(diff.mrHub).toBe(hub);
+ });
+
+ it('does not fatal if no event hub is provided', () => {
+ expect(() => {
+ new Diff(); /* eslint-disable-line no-new */
+ }).not.toThrow();
+ });
+
+ it("doesn't set the mrHub property if none is provided by the construction arguments", () => {
+ const diff = new Diff();
+
+ expect(diff.mrHub).toBe(undefined);
+ });
+ });
+
+ describe('viewTypeSwitch', () => {
+ const clickPath = '/path/somewhere?params=exist';
+ const jsonPath = 'http://test.host/path/somewhere.json?params=exist';
+ const simulatejQueryClick = {
+ originalEvent: {
+ target: {
+ getAttribute() {
+ return clickPath;
+ },
+ },
+ preventDefault: jest.fn(),
+ stopPropagation: jest.fn(),
+ },
+ };
+
+ it('emits the correct switch view event when called and there is an `mrHub`', async () => {
+ const diff = new Diff({ mergeRequestEventHub: hub });
+ const hubEmit = new Promise((resolve) => {
+ hub.$on('diff:switch-view-type', resolve);
+ });
+
+ diff.viewTypeSwitch(simulatejQueryClick);
+ const { source } = await hubEmit;
+
+ expect(simulatejQueryClick.originalEvent.preventDefault).toHaveBeenCalled();
+ expect(simulatejQueryClick.originalEvent.stopPropagation).toHaveBeenCalled();
+ expect(source).toBe(jsonPath);
+ });
+
+ it('is effectively a noop when there is no `mrHub`', () => {
+ const diff = new Diff();
+
+ expect(diff.mrHub).toBe(undefined);
+ expect(() => {
+ diff.viewTypeSwitch(simulatejQueryClick);
+ }).not.toThrow();
+ });
+ });
+ });
+});