59 lines
5.2 KiB
TypeScript
59 lines
5.2 KiB
TypeScript
import { RuleDownloader } from './RuleDownloader';
|
|
import mock from 'mock-fs';
|
|
import axios, { AxiosResponse } from 'axios';
|
|
jest.mock('axios');
|
|
const mockRules = [{'name':'vaccine_end_day_complete','type':'EU/1/20/1525','value':'365'},{'name':'vaccine_start_day_complete','type':'EU/1/20/1525','value':'15'},{'name':'vaccine_end_day_not_complete','type':'EU/1/20/1525','value':'365'},{'name':'vaccine_start_day_not_complete','type':'EU/1/20/1525','value':'15'},{'name':'vaccine_end_day_complete','type':'EU/1/21/1529','value':'365'},{'name':'vaccine_start_day_complete','type':'EU/1/21/1529','value':'0'},{'name':'vaccine_end_day_not_complete','type':'EU/1/21/1529','value':'84'},{'name':'vaccine_start_day_not_complete','type':'EU/1/21/1529','value':'15'},{'name':'vaccine_end_day_complete','type':'EU/1/20/1507','value':'365'},{'name':'vaccine_start_day_complete','type':'EU/1/20/1507','value':'0'},{'name':'vaccine_end_day_not_complete','type':'EU/1/20/1507','value':'42'},{'name':'vaccine_start_day_not_complete','type':'EU/1/20/1507','value':'15'},{'name':'vaccine_end_day_complete','type':'EU/1/20/1528','value':'365'},{'name':'vaccine_start_day_complete','type':'EU/1/20/1528','value':'0'},{'name':'vaccine_end_day_not_complete','type':'EU/1/20/1528','value':'42'},{'name':'vaccine_start_day_not_complete','type':'EU/1/20/1528','value':'15'},{'name':'rapid_test_start_hours','type':'GENERIC','value':'0'},{'name':'rapid_test_end_hours','type':'GENERIC','value':'48'},{'name':'molecular_test_start_hours','type':'GENERIC','value':'0'},{'name':'molecular_test_end_hours','type':'GENERIC','value':'48'},{'name':'recovery_cert_start_day','type':'GENERIC','value':'0'},{'name':'recovery_cert_end_day','type':'GENERIC','value':'180'},{'name':'ios','type':'APP_MIN_VERSION','value':'1.1.0'},{'name':'android','type':'APP_MIN_VERSION','value':'1.1.0'}];
|
|
|
|
const ruleDownloader = new RuleDownloader();
|
|
|
|
const mockedAxios = axios as jest.Mocked<typeof axios>;
|
|
const successResposnse: AxiosResponse = {
|
|
// data:[{'name':'vaccine_end_day_complete','type':'EU/1/20/1525','value':'365'},{'name':'vaccine_start_day_complete','type':'EU/1/20/1525','value':'15'},{'name':'vaccine_end_day_not_complete','type':'EU/1/20/1525','value':'365'},{'name':'vaccine_start_day_not_complete','type':'EU/1/20/1525','value':'15'},{'name':'vaccine_end_day_complete','type':'EU/1/21/1529','value':'365'},{'name':'vaccine_start_day_complete','type':'EU/1/21/1529','value':'0'},{'name':'vaccine_end_day_not_complete','type':'EU/1/21/1529','value':'84'},{'name':'vaccine_start_day_not_complete','type':'EU/1/21/1529','value':'15'},{'name':'vaccine_end_day_complete','type':'EU/1/20/1507','value':'365'},{'name':'vaccine_start_day_complete','type':'EU/1/20/1507','value':'0'},{'name':'vaccine_end_day_not_complete','type':'EU/1/20/1507','value':'42'},{'name':'vaccine_start_day_not_complete','type':'EU/1/20/1507','value':'15'},{'name':'vaccine_end_day_complete','type':'EU/1/20/1528','value':'365'},{'name':'vaccine_start_day_complete','type':'EU/1/20/1528','value':'0'},{'name':'vaccine_end_day_not_complete','type':'EU/1/20/1528','value':'42'},{'name':'vaccine_start_day_not_complete','type':'EU/1/20/1528','value':'15'},{'name':'rapid_test_start_hours','type':'GENERIC','value':'0'},{'name':'rapid_test_end_hours','type':'GENERIC','value':'48'},{'name':'molecular_test_start_hours','type':'GENERIC','value':'0'},{'name':'molecular_test_end_hours','type':'GENERIC','value':'48'},{'name':'recovery_cert_start_day','type':'GENERIC','value':'0'},{'name':'recovery_cert_end_day','type':'GENERIC','value':'180'},{'name':'ios','type':'APP_MIN_VERSION','value':'1.1.0'},{'name':'android','type':'APP_MIN_VERSION','value':'1.1.0'}],
|
|
data: mockRules,
|
|
status: 200,
|
|
statusText: 'OK',
|
|
headers:{
|
|
'Content-Type': 'application/json',
|
|
'Cache-control': 'private',
|
|
'Strict-Transport-Security': 'max-age=63072000; includeSubDomains; preload'
|
|
},
|
|
config: {}
|
|
};
|
|
|
|
describe('RuleDownloader', ()=>{
|
|
describe('getRules',()=>{
|
|
test('Testing getRules basic outcome: file loaded from local source and is still valid',async ()=>{
|
|
mock({
|
|
'./rules.json': Buffer.from(JSON.stringify({rules:mockRules,lastupdateDate:Date.now()}))
|
|
});
|
|
const rules = await ruleDownloader.getRules();
|
|
mock.restore();
|
|
expect(JSON.stringify(rules)).toBe(JSON.stringify(mockRules));
|
|
});
|
|
test('Testing getRules basic outcome: file loaded from local source and is still valid',async ()=>{
|
|
mockedAxios.get.mockResolvedValue(successResposnse);
|
|
const date = Date.now() - 86400010;
|
|
mock({
|
|
'./rules.json': Buffer.from(JSON.stringify({rules:mockRules,lastupdateDate:date}))
|
|
});
|
|
expect(axios.get).not.toHaveBeenCalled();
|
|
const rules = await ruleDownloader.getRules();
|
|
expect(axios.get).toHaveBeenCalled();
|
|
mock.restore();
|
|
expect(JSON.stringify(rules)).toBe(JSON.stringify(mockRules));
|
|
});
|
|
test('Testing getRules basic outcome: file loaded from local source and is still valid',async ()=>{
|
|
mock({});
|
|
try {
|
|
mockedAxios.get.mockResolvedValue(successResposnse);
|
|
const rules = await ruleDownloader.getRules();
|
|
mock.restore();
|
|
expect(JSON.stringify(rules)).toBe(JSON.stringify(mockRules));
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
|
|
});
|
|
});
|
|
});
|