Skip to content

Commit

Permalink
test: workspaces example
Browse files Browse the repository at this point in the history
  • Loading branch information
AriPerkkio committed May 18, 2023
1 parent c03f0a5 commit df0cfd6
Show file tree
Hide file tree
Showing 22 changed files with 216 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
fail-fast: false
matrix:
node-version: [16, 18]
example-name: [example-basic]
example-name: [example-basic, example-workspace]

steps:
- uses: actions/checkout@v3
Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,12 @@ sonar.javascript.lcov.reportPaths=./coverage/lcov.info

## Examples

### Workspace

See [examples/example-workspace](https://github.com/AriPerkkio/vitest-sonar-reporter/tree/main/examples/example-workspace) for example setup using [Vitest Workspaces](https://vitest.dev/guide/workspace.html).

### Basic

```ts
import { describe, expect, test } from 'vitest';

Expand Down
14 changes: 14 additions & 0 deletions examples/example-workspace/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "example-workspace",
"type": "module",
"private": true,
"scripts": {
"test": "vitest run && vitest run --root ./report-test --config vitest.config.report.ts"
},
"devDependencies": {
"typescript": "latest",
"vite": "^3",
"vitest": "latest",
"vitest-sonar-reporter": "file:../../"
}
}
8 changes: 8 additions & 0 deletions examples/example-workspace/packages/client/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "example-workspace-client",
"type": "module",
"private": true,
"scripts": {
"test": "vitest run"
}
}
12 changes: 12 additions & 0 deletions examples/example-workspace/packages/client/src/render-user.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { parseName } from '@shared';

export function renderUser(userName: string) {
const { first, last } = parseName(userName);

return `
<div class="user">
<span class="firstname">${first}</span>
<span class="lastname">${last}</span>
</div>
`;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { describe, test, expect } from 'vitest';

import { renderUser } from '../src/render-user';

describe('renderUser', () => {
test('renders user', () => {
expect(renderUser('John Doe')).toMatchInlineSnapshot(`
"
<div class=\\"user\\">
<span class=\\"firstname\\">John</span>
<span class=\\"lastname\\">Doe</span>
</div>
"
`);
});
});
13 changes: 13 additions & 0 deletions examples/example-workspace/packages/client/vitest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { fileURLToPath } from 'url';
import { defineConfig } from 'vitest/config';

export default defineConfig({
test: {
name: 'client',
alias: {
'@shared': fileURLToPath(
new URL('../shared/src/index.ts', import.meta.url)
),
},
},
});
8 changes: 8 additions & 0 deletions examples/example-workspace/packages/server/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "example-workspace-server",
"type": "module",
"private": true,
"scripts": {
"test": "vitest run"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { parseName } from '@shared';

export function parseUserFromRequest(request: {
headers: Record<string, string>;
}) {
const header = request.headers['x-user'];
return parseName(header);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { describe, expect, test } from 'vitest';

import { parseUserFromRequest } from '../src/request-parse';

describe('parseUserFromRequest', () => {
test('returns user from request', () => {
const request = { headers: { 'x-user': 'John Doe' } };

expect(parseUserFromRequest(request)).toEqual({
first: 'John',
last: 'Doe',
});
});
});
13 changes: 13 additions & 0 deletions examples/example-workspace/packages/server/vitest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { fileURLToPath } from 'url';
import { defineConfig } from 'vitest/config';

export default defineConfig({
test: {
name: 'server',
alias: {
'@shared': fileURLToPath(
new URL('../shared/src/index.ts', import.meta.url)
),
},
},
});
8 changes: 8 additions & 0 deletions examples/example-workspace/packages/shared/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "example-workspace-shared",
"type": "module",
"private": true,
"scripts": {
"test": "vitest run"
}
}
1 change: 1 addition & 0 deletions examples/example-workspace/packages/shared/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './user-utils';
9 changes: 9 additions & 0 deletions examples/example-workspace/packages/shared/src/user-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export function parseName(fullname: string) {
const [first, last] = fullname.split(' ');
return { first, last };
}

export function getInitials(fullname: string) {
const { first, last } = parseName(fullname);
return `${first[0]}.${last[0]}`;
}
19 changes: 19 additions & 0 deletions examples/example-workspace/packages/shared/test/user-utils.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { describe, expect, test } from 'vitest';

import { parseName, getInitials } from '../src/user-utils';

describe('parseName', () => {
test('returns first name', () => {
expect(parseName('John Doe')).toHaveProperty('first', 'John');
});

test('returns last name', () => {
expect(parseName('John Doe')).toHaveProperty('last', 'Doe');
});
});

describe('getInitials', () => {
test('returns initials', () => {
expect(getInitials('John Doe')).toBe('J.D');
});
});
7 changes: 7 additions & 0 deletions examples/example-workspace/packages/shared/vitest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { defineConfig } from 'vitest/config';

export default defineConfig({
test: {
name: 'shared',
},
});
2 changes: 2 additions & 0 deletions examples/example-workspace/pnpm-workspace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
packages:
- packages/*
29 changes: 29 additions & 0 deletions examples/example-workspace/report-test/report.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { existsSync, readFileSync } from 'node:fs';
import { expect, test } from 'vitest';

import { stabilizeReport } from '../../../test/utils';

test('report exists', () => {
expect(existsSync('./sonar-report.xml')).toBe(true);
});

test('report matches snapshot', () => {
const output = readFileSync('./sonar-report.xml', 'utf8');
const report = stabilizeReport(output);

expect(report).toMatchInlineSnapshot(`
"<testExecutions version=\\"1\\">
<file path=\\"packages/client/test/render-user.test.ts\\">
<testCase name=\\"renderUser - renders user\\" duration=\\"123\\" />
</file>
<file path=\\"packages/server/test/request-parse.test.ts\\">
<testCase name=\\"parseUserFromRequest - returns user from request\\" duration=\\"123\\" />
</file>
<file path=\\"packages/shared/test/user-utils.test.ts\\">
<testCase name=\\"parseName - returns first name\\" duration=\\"123\\" />
<testCase name=\\"parseName - returns last name\\" duration=\\"123\\" />
<testCase name=\\"getInitials - returns initials\\" duration=\\"123\\" />
</file>
</testExecutions>"
`);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { defineConfig } from 'vitest/config';

export default defineConfig({
test: {
include: ['report.test.ts'],
reporters: ['verbose'],
},
});
7 changes: 7 additions & 0 deletions examples/example-workspace/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"compilerOptions": {
"paths": {
"@shared": ["./packages/shared/src/index.ts"]
}
}
}
10 changes: 10 additions & 0 deletions examples/example-workspace/vitest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { defineConfig } from 'vitest/config';

export default defineConfig({
test: {
reporters: ['default', 'vitest-sonar-reporter'],
outputFile: {
'vitest-sonar-reporter': './sonar-report.xml',
},
},
});
3 changes: 3 additions & 0 deletions examples/example-workspace/vitest.workspace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { defineWorkspace } from 'vitest/config';

export default defineWorkspace(['packages/*']);

0 comments on commit df0cfd6

Please sign in to comment.