backend-common: provide a ReadTreeResponseFactory instance to all ReaderFactories

This commit is contained in:
Patrik Oldsberg
2020-11-12 12:33:58 +01:00
parent 5bc30d262f
commit e1057d9a50
4 changed files with 35 additions and 5 deletions
@@ -20,9 +20,14 @@ import { ConfigReader } from '@backstage/config';
import { getVoidLogger } from '../logging';
import { AzureUrlReader } from './AzureUrlReader';
import { msw } from '@backstage/test-utils';
import { ReadTreeResponseFactory } from './tree';
const logger = getVoidLogger();
const treeResponseFactory = ReadTreeResponseFactory.create({
config: new ConfigReader({}),
});
describe('AzureUrlReader', () => {
const worker = setupServer();
msw.setupDefaultHandlers(worker);
@@ -87,7 +92,11 @@ describe('AzureUrlReader', () => {
}),
},
])('should handle happy path %#', async ({ url, config, response }) => {
const [{ reader }] = AzureUrlReader.factory({ config, logger });
const [{ reader }] = AzureUrlReader.factory({
config,
logger,
treeResponseFactory,
});
const data = await reader.read(url);
const res = await JSON.parse(data.toString('utf-8'));
@@ -115,7 +124,11 @@ describe('AzureUrlReader', () => {
},
])('should handle error path %#', async ({ url, config, error }) => {
await expect(async () => {
const [{ reader }] = AzureUrlReader.factory({ config, logger });
const [{ reader }] = AzureUrlReader.factory({
config,
logger,
treeResponseFactory,
});
await reader.read(url);
}).rejects.toThrow(error);
});
@@ -20,9 +20,14 @@ import { ConfigReader } from '@backstage/config';
import { getVoidLogger } from '../logging';
import { GitlabUrlReader } from './GitlabUrlReader';
import { msw } from '@backstage/test-utils';
import { ReadTreeResponseFactory } from './tree';
const logger = getVoidLogger();
const treeResponseFactory = ReadTreeResponseFactory.create({
config: new ConfigReader({}),
});
describe('GitlabUrlReader', () => {
const worker = setupServer();
@@ -98,7 +103,11 @@ describe('GitlabUrlReader', () => {
}),
},
])('should handle happy path %#', async ({ url, config, response }) => {
const [{ reader }] = GitlabUrlReader.factory({ config, logger });
const [{ reader }] = GitlabUrlReader.factory({
config,
logger,
treeResponseFactory,
});
const data = await reader.read(url);
const res = await JSON.parse(data.toString('utf-8'));
@@ -114,7 +123,11 @@ describe('GitlabUrlReader', () => {
},
])('should handle error path %#', async ({ url, config, error }) => {
await expect(async () => {
const [{ reader }] = GitlabUrlReader.factory({ config, logger });
const [{ reader }] = GitlabUrlReader.factory({
config,
logger,
treeResponseFactory,
});
await reader.read(url);
}).rejects.toThrow(error);
});
@@ -23,6 +23,7 @@ import { BitbucketUrlReader } from './BitbucketUrlReader';
import { GithubUrlReader } from './GithubUrlReader';
import { GitlabUrlReader } from './GitlabUrlReader';
import { FetchUrlReader } from './FetchUrlReader';
import { ReadTreeResponseFactory } from './tree';
type CreateOptions = {
/** Root config object */
@@ -49,9 +50,10 @@ export class UrlReaders {
fallback,
}: CreateOptions): UrlReader {
const mux = new UrlReaderPredicateMux({ fallback: fallback });
const treeResponseFactory = ReadTreeResponseFactory.create({ config });
for (const factory of factories ?? []) {
const tuples = factory({ config, logger: logger });
const tuples = factory({ config, logger: logger, treeResponseFactory });
for (const tuple of tuples) {
mux.register(tuple);
@@ -16,6 +16,7 @@
import { Logger } from 'winston';
import { Config } from '@backstage/config';
import { ReadTreeResponseFactory } from './tree';
export type ReadTreeOptions = {
/** A filter that can be used to select which files should be extracted. By default all files are extracted */
@@ -46,6 +47,7 @@ export type UrlReaderPredicateTuple = {
export type ReaderFactory = (options: {
config: Config;
logger: Logger;
treeResponseFactory: ReadTreeResponseFactory;
}) => UrlReaderPredicateTuple[];
export type File = {