2
0
mirror of https://github.com/frappe/books.git synced 2024-11-09 23:30:56 +00:00
books/schemas/tests/helpers.ts

65 lines
1.7 KiB
TypeScript

import { cloneDeep } from 'lodash';
import Account from '../app/Account.json';
import JournalEntry from '../app/JournalEntry.json';
import JournalEntryAccount from '../app/JournalEntryAccount.json';
import PartyRegional from '../regional/in/Party.json';
import { Schema, SchemaStub, SchemaStubMap } from '../types';
import Customer from './Customer.json';
import Party from './Party.json';
interface AppSchemaMap extends SchemaStubMap {
Account: SchemaStub;
JournalEntry: SchemaStub;
JournalEntryAccount: SchemaStub;
Party: SchemaStub;
Customer: SchemaStub;
}
interface RegionalSchemaMap extends SchemaStubMap {
Party: SchemaStub;
}
export function getTestSchemaMap(): {
appSchemaMap: AppSchemaMap;
regionalSchemaMap: RegionalSchemaMap;
} {
const appSchemaMap = {
Account,
JournalEntry,
JournalEntryAccount,
Party,
Customer,
} as AppSchemaMap;
const regionalSchemaMap = { Party: PartyRegional } as RegionalSchemaMap;
return cloneDeep({
appSchemaMap,
regionalSchemaMap,
});
}
export function everyFieldExists(fieldList: string[], schema: Schema): boolean {
return fieldsExist(fieldList, schema, 'every');
}
export function someFieldExists(fieldList: string[], schema: Schema): boolean {
return fieldsExist(fieldList, schema, 'some');
}
function fieldsExist(
fieldList: string[],
schema: Schema,
type: 'every' | 'some'
): boolean {
const schemaFieldNames = schema.fields.map((f) => f.fieldname);
return fieldList.map((f) => schemaFieldNames.includes(f))[type](Boolean);
}
export function subtract(
targetList: string[],
...removalLists: string[][]
): string[] {
const removalList = removalLists.flat();
return targetList.filter((f) => !removalList.includes(f));
}