From 34f556492f30fe6a9c8205ea5db8a1c409698b9c Mon Sep 17 00:00:00 2001 From: Tomas Vik Date: Tue, 22 Jun 2021 10:29:13 +0200 Subject: [PATCH] refactor: MR can be from a fork or the same project --- .../items/mr_item_model.test.ts | 24 +++++++++++++++++-- src/data_providers/items/mr_item_model.ts | 5 ++++ src/test_utils/entities.ts | 2 ++ src/types.d.ts | 2 ++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/data_providers/items/mr_item_model.test.ts b/src/data_providers/items/mr_item_model.test.ts index 047b414..6732289 100644 --- a/src/data_providers/items/mr_item_model.test.ts +++ b/src/data_providers/items/mr_item_model.test.ts @@ -1,6 +1,6 @@ import * as vscode from 'vscode'; import { MrItemModel } from './mr_item_model'; -import { mr, repository } from '../../test_utils/entities'; +import { mr } from '../../test_utils/entities'; import { discussionOnDiff, noteOnDiffTextSnippet, @@ -9,6 +9,7 @@ import { import { CommentingRangeProvider } from '../../review/commenting_range_provider'; import { createWrappedRepository } from '../../test_utils/create_wrapped_repository'; import { fromReviewUri } from '../../review/review_uri'; +import { WrappedRepository } from '../../git/wrapped_repository'; const createCommentControllerMock = vscode.comments.createCommentController as jest.Mock; @@ -18,6 +19,7 @@ describe('MrItemModel', () => { let canUserCommentOnMr = false; let commentController: any; let gitLabService: any; + let repository: WrappedRepository; const createCommentThreadMock = jest.fn(); @@ -27,7 +29,7 @@ describe('MrItemModel', () => { getMrDiff: jest.fn().mockResolvedValue({ diffs: [] }), canUserCommentOnMr: jest.fn(async () => canUserCommentOnMr), }; - const repository = createWrappedRepository({ + repository = createWrappedRepository({ gitLabService, }); item = new MrItemModel(mr, repository); @@ -45,6 +47,24 @@ describe('MrItemModel', () => { createCommentThreadMock.mockReset(); }); + describe('MR item context', () => { + it('should return return correct context when MR comes from the same project', () => { + item = new MrItemModel( + { ...mr, source_project_id: 1234, target_project_id: 1234 }, + repository, + ); + expect(item.getTreeItem().contextValue).toBe('mr-item-from-same-project'); + }); + + it('should return return correct context when MR comes from a fork', () => { + item = new MrItemModel( + { ...mr, source_project_id: 5678, target_project_id: 1234 }, + repository, + ); + expect(item.getTreeItem().contextValue).toBe('mr-item-from-fork'); + }); + }); + it('should add comment thread to VS Code', async () => { await item.getChildren(); expect(createCommentControllerMock).toBeCalledWith( diff --git a/src/data_providers/items/mr_item_model.ts b/src/data_providers/items/mr_item_model.ts index c50e1df..6000bfc 100644 --- a/src/data_providers/items/mr_item_model.ts +++ b/src/data_providers/items/mr_item_model.ts @@ -58,6 +58,7 @@ export class MrItemModel extends ItemModel { if (author.avatar_url) { item.iconPath = vscode.Uri.parse(author.avatar_url); } + item.contextValue = `mr-item-from-${this.isFromFork ? 'fork' : 'same-project'}`; return item; } @@ -121,4 +122,8 @@ export class MrItemModel extends ItemModel { ); }); } + + get isFromFork(): boolean { + return this.mr.target_project_id !== this.mr.source_project_id; + } } diff --git a/src/test_utils/entities.ts b/src/test_utils/entities.ts index c2ff24c..a9d7f91 100644 --- a/src/test_utils/entities.ts +++ b/src/test_utils/entities.ts @@ -30,6 +30,8 @@ export const mr: RestMr = { full: 'gitlab-org/gitlab!2000', }, sha: '69ad609e8891b8aa3db85a35cd2c5747705bd76a', + source_project_id: 9999, + target_project_id: 9999, }; export const diffFile: RestDiffFile = { diff --git a/src/types.d.ts b/src/types.d.ts index 6f5848e..ae4f844 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -23,6 +23,8 @@ interface RestIssuable { interface RestMr extends RestIssuable { sha: string; + source_project_id: number; + target_project_id: number; } interface RestMrVersion { -- GitLab