Skip to content

Commit f1be51f

Browse files
authored
Static service refactored to support different implementations (#321)
* Static service refactored to support different implementations
1 parent 5ba5b16 commit f1be51f

30 files changed

+236
-72
lines changed

.env

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ POSTGRES_USER=postgres
1212
POSTGRES_PASSWORD=postgres
1313
POSTGRES_DB=vrt_db_dev
1414

15+
# static
16+
STATIC_SERVICE=hdd # hdd | s3 - hdd as default if not provided
17+
18+
# AWS_ACCESS_KEY_ID=
19+
# AWS_SECRET_ACCESS_KEY=
20+
# AWS_REGION=
21+
# AWS_S3_BUCKET_NAME=
22+
1523
# optional
1624
#HTTPS_KEY_PATH='./secrets/ssl.key'
1725
#HTTPS_CERT_PATH='./secrets/ssl.cert'

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"**/.git/objects/**": true,
44
"**/.git/subtree-cache/**": true,
55
"**/.hg/store/**": true
6-
}
6+
},
7+
"jest.runMode":"on-demand"
78
}

package-lock.json

Lines changed: 0 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
"@nestjs/testing": "^10.2.5",
6868
"@types/bcryptjs": "^2.4.4",
6969
"@types/cache-manager": "^3.4.3",
70-
"@types/cron": "^2.4.0",
7170
"@types/express": "^4.17.17",
7271
"@types/jest": "^29.5.5",
7372
"@types/lodash": "^4.14.198",

src/compare/compare.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import { CompareService } from './compare.service';
33
import { LookSameService } from './libs/looks-same/looks-same.service';
44
import { OdiffService } from './libs/odiff/odiff.service';
55
import { PixelmatchService } from './libs/pixelmatch/pixelmatch.service';
6+
import { StaticModule } from '../static/static.module';
67

78
@Module({
89
providers: [CompareService, PixelmatchService, LookSameService, OdiffService],
10+
imports: [StaticModule],
911
exports: [CompareService],
1012
})
1113
export class CompareModule {}

src/compare/compare.service.spec.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
import { Test, TestingModule } from '@nestjs/testing';
22
import { PrismaService } from '../prisma/prisma.service';
3-
import { StaticService } from '../shared/static/static.service';
43
import { CompareService } from './compare.service';
54
import { LookSameService } from './libs/looks-same/looks-same.service';
65
import { OdiffService } from './libs/odiff/odiff.service';
76
import { PixelmatchService } from './libs/pixelmatch/pixelmatch.service';
7+
import { StaticModule } from '../static/static.module';
88

99
describe('CompareService', () => {
1010
let service: CompareService;
1111

1212
beforeEach(async () => {
1313
const module: TestingModule = await Test.createTestingModule({
14-
providers: [CompareService, OdiffService, PixelmatchService, LookSameService, StaticService, PrismaService],
14+
providers: [CompareService, OdiffService, PixelmatchService, LookSameService, PrismaService],
15+
imports: [StaticModule],
1516
}).compile();
1617

1718
service = module.get<CompareService>(CompareService);

src/compare/libs/looks-same/looks-same.service.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { TestingModule, Test } from '@nestjs/testing';
22
import { TestStatus } from '@prisma/client';
33
import { PNG } from 'pngjs';
4-
import { StaticService } from '../../../shared/static/static.service';
4+
import { StaticService } from '../../../static/static.service';
55
import { DIFF_DIMENSION_RESULT, EQUAL_RESULT, NO_BASELINE_RESULT } from '../consts';
66
import { DEFAULT_CONFIG, LookSameService } from './looks-same.service';
77
import { LooksSameConfig } from './looks-same.types';

src/compare/libs/looks-same/looks-same.service.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Injectable, Logger } from '@nestjs/common';
22
import { TestStatus } from '@prisma/client';
33
import { PNG } from 'pngjs';
4-
import { StaticService } from '../../../shared/static/static.service';
4+
import { StaticService } from '../../../static/static.service';
55
import { DiffResult } from '../../../test-runs/diffResult';
66
import { applyIgnoreAreas, parseConfig } from '../../utils';
77
import { ImageComparator } from '../image-comparator.interface';
@@ -32,8 +32,8 @@ export class LookSameService implements ImageComparator {
3232
...NO_BASELINE_RESULT,
3333
};
3434

35-
const baseline = this.staticService.getImage(data.baseline);
36-
const image = this.staticService.getImage(data.image);
35+
const baseline = await this.staticService.getImage(data.baseline);
36+
const image = await this.staticService.getImage(data.image);
3737

3838
if (!baseline) {
3939
return NO_BASELINE_RESULT;

src/compare/libs/odiff/odiff.service.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { TestingModule, Test } from '@nestjs/testing';
22
import { TestStatus } from '@prisma/client';
33
import { IgnoreAreaDto } from 'src/test-runs/dto/ignore-area.dto';
4-
import { StaticService } from '../../../shared/static/static.service';
4+
import { StaticService } from '../../../static/static.service';
55
import { DIFF_DIMENSION_RESULT, NO_BASELINE_RESULT } from '../consts';
66
import { OdiffService, DEFAULT_CONFIG, ignoreAreaToRegionMapper } from './odiff.service';
77
import { OdiffConfig, OdiffIgnoreRegions } from './odiff.types';

src/compare/libs/odiff/odiff.service.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Injectable, Logger } from '@nestjs/common';
22
import { TestStatus } from '@prisma/client';
3-
import { StaticService } from '../../../shared/static/static.service';
3+
import { StaticService } from '../../../static/static.service';
44
import { DiffResult } from '../../../test-runs/diffResult';
55
import { parseConfig } from '../../utils';
66
import { ImageComparator } from '../image-comparator.interface';
@@ -9,6 +9,8 @@ import { DIFF_DIMENSION_RESULT, NO_BASELINE_RESULT } from '../consts';
99
import { compare } from 'odiff-bin';
1010
import { IgnoreAreaDto } from 'src/test-runs/dto/ignore-area.dto';
1111
import { OdiffConfig, OdiffIgnoreRegions, OdiffResult } from './odiff.types';
12+
import { HddService } from 'src/static/hdd/hdd.service';
13+
import { isHddStaticServiceConfigured } from '../../../static/utils';
1214

1315
export const DEFAULT_CONFIG: OdiffConfig = {
1416
outputDiffMask: true,
@@ -20,8 +22,14 @@ export const DEFAULT_CONFIG: OdiffConfig = {
2022
@Injectable()
2123
export class OdiffService implements ImageComparator {
2224
private readonly logger: Logger = new Logger(OdiffService.name);
25+
private readonly hddService: HddService;
2326

24-
constructor(private staticService: StaticService) {}
27+
constructor(private staticService: StaticService) {
28+
if (!isHddStaticServiceConfigured()) {
29+
throw new Error('OdiffService can only be used with HddService');
30+
}
31+
this.hddService = this.staticService as unknown as HddService;
32+
}
2533

2634
parseConfig(configJson: string): OdiffConfig {
2735
return parseConfig(configJson, DEFAULT_CONFIG, this.logger);
@@ -37,10 +45,10 @@ export class OdiffService implements ImageComparator {
3745
}
3846

3947
// compare
40-
const diff = this.staticService.generateNewImage('diff');
48+
const diff = this.hddService.generateNewImage('diff');
4149
const compareResult = (await compare(
42-
this.staticService.getImagePath(data.baseline),
43-
this.staticService.getImagePath(data.image),
50+
this.hddService.getImagePath(data.baseline),
51+
this.hddService.getImagePath(data.image),
4452
diff.imagePath,
4553
{
4654
...config,

0 commit comments

Comments
 (0)