feature: naive implementation of entities API usage

This commit is contained in:
Nikita Nek Dudnik
2020-05-27 16:34:11 +02:00
parent 5a169c9a34
commit 8d26fb5c5f
5 changed files with 31 additions and 51 deletions
+7
View File
@@ -72,6 +72,13 @@
"pathRewrite": {
"^/circleci/api/": "/"
}
},
"/catalog/api": {
"target": "http://localhost:3003",
"changeOrigin": true,
"pathRewrite": {
"^/catalog/api/": "/"
}
}
}
}
+1
View File
@@ -15,6 +15,7 @@
*/
export type Component = {
name: string;
status: string;
};
export interface ComponentFactory {
+23 -25
View File
@@ -14,35 +14,33 @@
* limitations under the License.
*/
import { Component, ComponentFactory } from './component';
import mock from './mock-factory-data.json';
import { DescriptorEnvelope } from '../../../catalog-backend/src/ingestion/types';
function transformEnvelopeToComponent(data: DescriptorEnvelope): Component {
return {
name: data.metadata?.name ?? '',
status: data.metadata?.labels?.status ?? 'Up and running',
};
}
let inMemoryStore: Promise<Component[]>;
const ARTIFICIAL_TIMEOUT = 800;
let inMemoryStore = [...mock];
export const MockComponentFactory: ComponentFactory = {
getAllComponents(): Promise<Component[]> {
return new Promise((resolve) =>
setTimeout(() => resolve(inMemoryStore), ARTIFICIAL_TIMEOUT),
);
inMemoryStore =
inMemoryStore ??
fetch('//localhost:3000/catalog/api/entities')
.then(response => response.json())
.then(data => data.map(transformEnvelopeToComponent));
return inMemoryStore;
},
getComponentByName(name: string): Promise<Component | undefined> {
return new Promise((resolve, reject) =>
setTimeout(() => {
const mockComponent = inMemoryStore.find(
(component) => component.name === name,
);
if (mockComponent) return resolve(mockComponent);
return reject({ code: 'Component not found!' });
}, ARTIFICIAL_TIMEOUT),
);
async getComponentByName(name: string): Promise<Component | undefined> {
const components = await this.getAllComponents();
const mockComponent = components.find(component => component.name === name);
if (mockComponent) return mockComponent;
throw new Error(`'Component not found: ${name}`);
},
removeComponentByName(name: string): Promise<boolean> {
return new Promise((resolve) =>
setTimeout(() => {
inMemoryStore = inMemoryStore.filter(
(component) => component.name !== name,
);
resolve(true);
}, ARTIFICIAL_TIMEOUT),
);
async removeComponentByName(_: string): Promise<boolean> {
return true;
},
};
-1
View File
@@ -16,6 +16,5 @@
export { plugin } from './plugin';
export * from './api';
export * from './proxy';
export * from './route-refs';
export { CircleCIWidget } from './components/App';
-25
View File
@@ -1,25 +0,0 @@
/*
* Copyright 2020 Spotify AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export const proxySettings = {
'/circleci/api': {
target: 'https://circleci.com/api/v1.1',
changeOrigin: true,
logLevel: 'debug',
pathRewrite: {
'^/circleci/api/': '/',
},
},
};