提交 28d322c6 编写于 作者: T Tomas Vik

fix: comment controller can be disposed regardless of API failures

上级 17c7a92a
......@@ -16,22 +16,25 @@ describe('MrItemModel', () => {
let commentThread: vscode.CommentThread;
let canUserCommentOnMr = false;
let commentController: any;
let gitLabService: any;
const createCommentThreadMock = jest.fn();
beforeEach(() => {
gitLabService = {
getDiscussions: jest.fn().mockResolvedValue([discussionOnDiff, multipleNotes]),
getMrDiff: jest.fn().mockResolvedValue({ diffs: [] }),
canUserCommentOnMr: jest.fn(async () => canUserCommentOnMr),
};
const repository = createWrappedRepository({
gitLabService: {
getDiscussions: jest.fn().mockResolvedValue([discussionOnDiff, multipleNotes]),
getMrDiff: jest.fn().mockResolvedValue({ diffs: [] }),
canUserCommentOnMr: jest.fn(async () => canUserCommentOnMr),
},
gitLabService,
});
item = new MrItemModel(mr, repository);
commentThread = {} as vscode.CommentThread;
commentController = {
createCommentThread: createCommentThreadMock.mockReturnValue(commentThread),
dispose: jest.fn(),
};
createCommentControllerMock.mockReturnValue(commentController);
});
......@@ -70,5 +73,16 @@ describe('MrItemModel', () => {
expect(commentController.commentingRangeProvider).toBeInstanceOf(CommentingRangeProvider);
});
// this test ensures that we add comment controller to disposables before calling API.
it('comment controller can be disposed regardless of API failures', async () => {
gitLabService.getDiscussions = () => Promise.reject(new Error());
await item.getChildren();
expect(commentController.dispose).not.toHaveBeenCalled();
item.dispose();
expect(commentController.dispose).toHaveBeenCalled();
});
});
});
......@@ -64,6 +64,8 @@ export class MrItemModel extends ItemModel {
this.mr.references.full,
this.mr.title,
);
this.setDisposableChildren([commentController]);
const gitlabService = this.repository.getGitLabService();
if (await gitlabService.canUserCommentOnMr(this.mr)) {
......@@ -83,6 +85,5 @@ export class MrItemModel extends ItemModel {
gitlabService,
});
});
this.setDisposableChildren([commentController]);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册