提交 34f55649 编写于 作者: T Tomas Vik

refactor: MR can be from a fork or the same project

上级 7c2f2ed4
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(
......
......@@ -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;
}
}
......@@ -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 = {
......
......@@ -23,6 +23,8 @@ interface RestIssuable {
interface RestMr extends RestIssuable {
sha: string;
source_project_id: number;
target_project_id: number;
}
interface RestMrVersion {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册