Skip to content

Commit 10b7f5a

Browse files
authored
Merge pull request #2568 from jplag/report-viewer/test-store
Test report viewer store.
2 parents c80f21d + 60b61ac commit 10b7f5a

File tree

13 files changed

+752
-15
lines changed

13 files changed

+752
-15
lines changed

.github/workflows/report-viewer-unit.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,8 @@ jobs:
4747
- name: Test ui-components
4848
working-directory: report-viewer/ui-components
4949
run: |
50-
npm run test
50+
npm run test
51+
- name: Test report-viewer
52+
working-directory: report-viewer/report-viewer
53+
run: |
54+
npm run test:unit

report-viewer/.lintstagedrc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"*.ts": ["npx prettier --write", "npx eslint --max-warnings 0"],
2+
"*.ts": ["npx prettier --write", "npx eslint --max-warnings 0 --no-warn-ignored"],
33
"*.vue": ["npx prettier --write", "npx eslint --max-warnings 0"],
44
"*.js": ["npx prettier --write", "npx eslint --max-warnings 0"],
55
"*.html": ["npx prettier --write", "npx eslint --max-warnings 0"],

report-viewer/model/src/Distribution.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,8 @@ export class Distribution {
2222
}
2323

2424
type BucketOptions = 10 | 20 | 25 | 50 | 100
25-
type DistributionMap = Record<MetricJsonIdentifier, Distribution>
25+
export type DistributionMetrics =
26+
| MetricJsonIdentifier.AVERAGE_SIMILARITY
27+
| MetricJsonIdentifier.MAXIMUM_SIMILARITY
28+
type DistributionMap = Record<DistributionMetrics, Distribution>
2629
export type { BucketOptions, DistributionMap }

report-viewer/parser/src/factories/DistributionFactory.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { Distribution, type DistributionMap, MetricJsonIdentifier } from '@jplag/model'
1+
import {
2+
Distribution,
3+
type DistributionMap,
4+
DistributionMetrics,
5+
MetricJsonIdentifier
6+
} from '@jplag/model'
27

38
export class DistributionFactory {
49
public static getDistributions(distributionFile: string): DistributionMap {
@@ -7,8 +12,11 @@ export class DistributionFactory {
712

813
private static extractDistributions(json: ReportFormatDistributionMap): DistributionMap {
914
const distributions = {} as DistributionMap
10-
for (const [key, value] of Object.entries(json)) {
11-
distributions[key as MetricJsonIdentifier] = new Distribution(value)
15+
for (const metric of [
16+
MetricJsonIdentifier.AVERAGE_SIMILARITY,
17+
MetricJsonIdentifier.MAXIMUM_SIMILARITY
18+
] as DistributionMetrics[]) {
19+
distributions[metric] = new Distribution(json[metric])
1220
}
1321
return distributions
1422
}

report-viewer/report-viewer/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"build-dev-demo": "run-p type-check && vite build --mode dev-demo",
1111
"type-check": "vue-tsc --noEmit --composite false",
1212
"test:e2e": "playwright test",
13+
"test:unit": "vitest",
1314
"preview": "vite preview"
1415
},
1516
"dependencies": {

report-viewer/report-viewer/src/stores/reportStore.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { router } from '../router'
2-
import { minimalReportVersion, reportViewerVersion } from '@/version/versions'
2+
import { minimalReportVersion, reportViewerVersion } from '../version/versions'
33
import {
44
CliOptions,
55
Cluster,
@@ -281,7 +281,6 @@ export const reportStore = defineStore('reportStore', () => {
281281
return {
282282
loadReport,
283283
isReportLoaded,
284-
getFile,
285284
getComparison,
286285
getSubmissionCount,
287286
getReportFileName,
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import { beforeEach, describe, expect, it, vi } from 'vitest'
2+
import { mockFiles, mockParser, mockSessionStorage, registerMockRouter } from './mocks'
3+
4+
registerMockRouter()
5+
mockSessionStorage()
6+
mockParser()
7+
8+
import { reportStore } from '../../../src/stores/reportStore'
9+
import { setActivePinia, createPinia } from 'pinia'
10+
11+
describe('Test Anonymization', () => {
12+
beforeEach(() => {
13+
setActivePinia(createPinia())
14+
vi.clearAllMocks()
15+
reportStore().reset()
16+
reportStore().loadReport(mockFiles, [], 'test')
17+
})
18+
19+
it('Getting Display Name', () => {
20+
expect(reportStore().getPlainDisplayName('test1')).toEqual('Test1')
21+
expect(reportStore().getDisplayName('test1')).toEqual('Test1')
22+
})
23+
24+
it('Getting Display Name with Anonymization', () => {
25+
reportStore().setAnonymous('test1', true)
26+
expect(reportStore().getAnonymizedName('test1')).toEqual('anon1')
27+
expect(reportStore().getDisplayName('test1')).toEqual('anon1')
28+
expect(reportStore().getPlainDisplayName('test1')).toEqual('Test1')
29+
})
30+
31+
it('Keep number asociated with anonymized names', () => {
32+
reportStore().setAnonymous('test1', true)
33+
reportStore().setAnonymous('test2', true)
34+
expect(reportStore().getDisplayName('test1')).toEqual('anon1')
35+
expect(reportStore().getDisplayName('test2')).toEqual('anon2')
36+
37+
reportStore().setAnonymous('test1', false)
38+
reportStore().setAnonymous('test3', true)
39+
40+
expect(reportStore().getDisplayName('test1')).toEqual('Test1')
41+
expect(reportStore().getDisplayName('test2')).toEqual('anon2')
42+
expect(reportStore().getDisplayName('test3')).toEqual('anon3')
43+
44+
reportStore().setAnonymous('test1', true)
45+
expect(reportStore().getDisplayName('test1')).toEqual('anon1')
46+
})
47+
48+
it('Test isAnonymized', () => {
49+
expect(reportStore().isAnonymized('test1')).toEqual(false)
50+
reportStore().setAnonymous('test1', true)
51+
expect(reportStore().isAnonymized('test1')).toEqual(true)
52+
reportStore().setAnonymous('test1', false)
53+
expect(reportStore().isAnonymized('test1')).toEqual(false)
54+
reportStore().setAnonymous('test1', true)
55+
56+
reportStore().setAnonymous('test2', true)
57+
expect(reportStore().isAnonymized('test2')).toEqual(true)
58+
reportStore().setAnonymous('test2', false)
59+
expect(reportStore().isAnonymized('test2')).toEqual(false)
60+
})
61+
62+
it('Test toggleAnonymous', () => {
63+
expect(reportStore().isAnonymized('test1')).toEqual(false)
64+
reportStore().toggleAnonymous('test1')
65+
expect(reportStore().isAnonymized('test1')).toEqual(true)
66+
reportStore().toggleAnonymous('test1')
67+
expect(reportStore().isAnonymized('test1')).toEqual(false)
68+
69+
reportStore().setAnonymous('test2', true)
70+
expect(reportStore().isAnonymized('test2')).toEqual(true)
71+
reportStore().toggleAnonymous('test2')
72+
expect(reportStore().isAnonymized('test2')).toEqual(false)
73+
reportStore().toggleAnonymous('test2')
74+
expect(reportStore().isAnonymized('test2')).toEqual(true)
75+
})
76+
77+
it('Test allAreAnonymized', () => {
78+
expect(reportStore().allAreAnonymized()).toEqual(false)
79+
reportStore().setAnonymous('test1', true)
80+
expect(reportStore().allAreAnonymized()).toEqual(false)
81+
reportStore().setAnonymous('test2', true)
82+
expect(reportStore().allAreAnonymized()).toEqual(false)
83+
reportStore().setAnonymous('test3', true)
84+
expect(reportStore().allAreAnonymized()).toEqual(true)
85+
reportStore().setAnonymous('test2', false)
86+
expect(reportStore().allAreAnonymized()).toEqual(false)
87+
reportStore().setAnonymous('test1', false)
88+
expect(reportStore().allAreAnonymized()).toEqual(false)
89+
reportStore().setAnonymous('test2', true)
90+
expect(reportStore().allAreAnonymized()).toEqual(false)
91+
reportStore().setAnonymous('test1', true)
92+
expect(reportStore().allAreAnonymized()).toEqual(true)
93+
})
94+
95+
it('Test toggleAnonymousForAll', () => {
96+
expect(reportStore().isAnonymized('test1')).toEqual(false)
97+
expect(reportStore().isAnonymized('test2')).toEqual(false)
98+
expect(reportStore().isAnonymized('test3')).toEqual(false)
99+
reportStore().toggleAnonymousForAll()
100+
expect(reportStore().isAnonymized('test1')).toEqual(true)
101+
expect(reportStore().isAnonymized('test2')).toEqual(true)
102+
expect(reportStore().isAnonymized('test3')).toEqual(true)
103+
reportStore().toggleAnonymousForAll()
104+
expect(reportStore().isAnonymized('test1')).toEqual(false)
105+
expect(reportStore().isAnonymized('test2')).toEqual(false)
106+
expect(reportStore().isAnonymized('test3')).toEqual(false)
107+
108+
// Test behavior when some are already anonymized and some are not
109+
reportStore().setAnonymous('test1', true)
110+
reportStore().setAnonymous('test2', true)
111+
expect(reportStore().isAnonymized('test1')).toEqual(true)
112+
expect(reportStore().isAnonymized('test2')).toEqual(true)
113+
expect(reportStore().isAnonymized('test3')).toEqual(false)
114+
reportStore().toggleAnonymousForAll()
115+
expect(reportStore().isAnonymized('test1')).toEqual(true)
116+
expect(reportStore().isAnonymized('test2')).toEqual(true)
117+
expect(reportStore().isAnonymized('test3')).toEqual(true)
118+
})
119+
})

0 commit comments

Comments
 (0)