提交 3078bbbb 编写于 作者: T Tomas Vik

Merge branch 'add-some-tests' into 'main'

Add some tests

See merge request gitlab-org/gitlab-vscode-extension!145
......@@ -5,3 +5,4 @@ node_modules
.DS_Store
src/webview/dist/*.hot-update.js*
out
/coverage/
\ No newline at end of file
......@@ -45,7 +45,7 @@ test-unit:
script:
- apt-get update && apt-get install -y git
- npm ci
- npm run test-unit
- npm run test-unit -- --coverage
test-integration:
stage: test
......
......@@ -4,3 +4,4 @@ package.json
.vscode-test
src/webview/dist
out
.gitlab-ci.yml
......@@ -6,7 +6,7 @@ module.exports = {
clearMocks: true,
coverageDirectory: 'coverage',
coverageProvider: 'v8',
coverageReporters: ['lcov'],
coverageReporters: ['lcov', 'text'],
roots: ['src'],
testPathIgnorePatterns: ['/node_modules/', '/src/webview/'],
testEnvironment: 'node',
......
......@@ -4954,9 +4954,9 @@
"dev": true
},
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
"inquirer": {
......
......@@ -12,9 +12,9 @@ module.exports = {
Uri: {
file: path => ({
path,
with: (...args) => ({
with: args => ({
path,
args,
...args,
}),
}),
parse: str => str,
......@@ -22,6 +22,12 @@ module.exports = {
comments: {
createCommentController: jest.fn(),
},
window: {
showErrorMessage: jest.fn(),
},
commands: {
executeCommand: jest.fn(),
},
CommentMode: { Preview: 1 },
CommentThreadCollapsibleState: { Expanded: 1 },
Position: function Position(x, y) {
......
import * as vscode from 'vscode';
import { IDetailedError } from './errors/common';
import { handleError, initializeLogging, log, logError } from './log';
import { USER_COMMANDS } from './command_names';
jest.mock('vscode');
describe('logging', () => {
afterEach(() => {
expect.hasAssertions();
});
let logFunction: jest.Mock;
beforeEach(() => {
logFunction = jest.fn();
initializeLogging(logFunction);
});
describe('log', () => {
it('passes the argument to the handler', () => {
const message = 'A very bad error occured';
log(message);
expect(logFunction).toBeCalledTimes(1);
expect(logFunction).toBeCalledWith(message);
});
});
describe('logError', () => {
describe('for normal errors', () => {
it('passes the argument to the handler', () => {
const message = 'A very bad error occured';
const error = new Error(message);
logError(error);
expect(logFunction).toBeCalledTimes(1);
expect(logFunction).toBeCalledWith(`${message}\n${error.stack}`);
});
});
describe('for detailed errors', () => {
it('passes the details to the handler', () => {
const details = 'Could not fetch from GitLab: error 404';
logError({
details,
} as IDetailedError);
expect(logFunction).toBeCalledTimes(1);
expect(logFunction).toBeCalledWith(details);
});
});
});
describe('handleError', () => {
const message = 'Uncaught TypeError: NetworkError when attempting to fetch resource.';
const showErrorMessage = vscode.window.showErrorMessage as jest.Mock;
it('passes the argument to the handler', () => {
const error = new Error(message);
handleError(error);
expect(logFunction).toBeCalledTimes(1);
expect(logFunction).toBeCalledWith(`${message}\n${error.stack}`);
});
it('prompts the user to show the logs', () => {
handleError(new Error(message));
expect(showErrorMessage).toBeCalledTimes(1);
expect(showErrorMessage).toBeCalledWith(message, 'Show logs');
});
it('shows the logs when the user confirms the prompt', async () => {
const executeCommand = vscode.commands.executeCommand as jest.Mock;
showErrorMessage.mockResolvedValue('Show logs');
await handleError(new Error(message));
expect(executeCommand).toBeCalledWith(USER_COMMANDS.SHOW_OUTPUT);
});
});
});
import * as vscode from 'vscode';
import { fromReviewUri, toReviewUri } from './review_uri';
jest.mock('vscode');
describe('review_uri.ts', () => {
const uri = {
path: '/review',
query: '{"commit":"abcdef","workspacePath":"https://gitlab-example.com/test","projectId":1234}',
scheme: 'gl-review',
};
const params = {
commit: 'abcdef',
path: '/review',
projectId: 1234,
workspacePath: 'https://gitlab-example.com/test',
};
describe('toReviewUri', () => {
it('returns the correct Uri', () => {
const result = toReviewUri(params);
expect(result).toEqual(uri);
});
});
describe('fromReviewUri', () => {
it('returns the correct string', () => {
const result = fromReviewUri(uri as vscode.Uri);
expect(result).toEqual(params);
});
});
});
......@@ -6,12 +6,15 @@ const { tokenService } = require('../../src/services/token_service');
const gitLabService = require('../../src/gitlab_service');
const { GitLabNewService } = require('../../src/gitlab/gitlab_new_service');
const snippetsResponse = require('./fixtures/graphql/snippets.json');
const packageJson = require('../../package.json');
const validateUserAgent = req => {
const userAgent = req.headers.get('User-Agent');
assert(
userAgent.startsWith('vs-code-gitlab-workflow/'),
`User-Agent header ${userAgent} must start with vs-code-gitlab-workflow/`,
const nodeJsVersion = `${process.version.substr(1)} (${process.platform}; ${process.arch})`;
assert.strictEqual(
userAgent,
`vs-code-gitlab-workflow/${packageJson.version} VSCode/1.52.1 Node.js/${nodeJsVersion}`,
);
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册