* Initial import of playwright tests * Pipeline changes for automated tests * Modified pipeline for testing * Attempt #2 * Attempt #3 * Added missing paren * Removed debug stuff from pipeline * Changes from playwright repo * Changed pipeline for debugging * Fix for ServiceLocationPage playwright locators * Change pipeline to run with TEST APIs * Moved more of Siraj's changes to this repo * Changed where updating env occurs * Changed location of env update again * Escaped double quotes * Added visible report in Azure * Moved changes into main pipeline * Made it so dotenv only runs config in local
76 lines
No EOL
2.4 KiB
TypeScript
76 lines
No EOL
2.4 KiB
TypeScript
function isFlags(enumObj: object): boolean {
|
|
const values = Object.values(enumObj).filter(v => typeof v === "number");
|
|
return values.some(v => v !== 0 && (v & (v - 1)) === 0);
|
|
}
|
|
|
|
function isValidEnumValue(value: any, enumType: object): boolean {
|
|
if (isFlags(enumType)) {
|
|
const allFlags = Object.values(enumType).reduce((acc, val) => typeof val === "number" ? acc | val : acc, 0);
|
|
return typeof value === "number" && (value & allFlags) === value;
|
|
} else {
|
|
return Object.values(enumType).includes(value);
|
|
}
|
|
}
|
|
|
|
function getEnumValues(enumObj: object): string[] | number[] {
|
|
if (!isFlags(enumObj))
|
|
return Object.values(enumObj);
|
|
return Object.values(enumObj).filter(value => typeof value === "number") as number[];
|
|
}
|
|
|
|
function getEnumString<T extends { [key: string]: string | number }>(enumObj: T, flags: number): string {
|
|
if (flags === 0)
|
|
return Object.keys(enumObj).find(key => enumObj[key] === 0) || 'None';
|
|
|
|
const attributes = Object.entries(enumObj).filter(([key, value]) =>
|
|
typeof value === 'number' && value !== 0 && (flags & value) === value)
|
|
.map(([key]) => key);
|
|
|
|
return attributes.length === 1 ? attributes[0] : attributes.join(', ');
|
|
}
|
|
|
|
function validateEnumProperty(json: any, property: string, enumType: object): number | string | null {
|
|
if (json.hasOwnProperty(property) && isValidEnumValue(json[property], enumType))
|
|
return json[property];
|
|
return null;
|
|
}
|
|
|
|
function hasFlag(value: number | string, flag: number | string, enumType: object): boolean {
|
|
if (isFlags(enumType))
|
|
return typeof value === "number" && typeof flag === "number" && (value & flag) === flag;
|
|
else
|
|
return value === flag;
|
|
}
|
|
|
|
function addFlag(value: number, flag: number, enumType: object): number {
|
|
if (isFlags(enumType))
|
|
return value | flag;
|
|
else
|
|
throw new Error("Attempted to add flag on non-flags enum");
|
|
}
|
|
|
|
function removeFlag(value: number, flag: number, enumType: object): number {
|
|
if (isFlags(enumType))
|
|
return value & ~flag;
|
|
else
|
|
throw new Error("Attempted to remove flag on non-flags enum");
|
|
}
|
|
|
|
function toggleFlag(value: number, flag: number, enumType: object): number {
|
|
if (isFlags(enumType))
|
|
return value ^ flag;
|
|
else
|
|
throw new Error("Attempted to toggle flag on non-flags enum");
|
|
}
|
|
|
|
const EnumUtils = {
|
|
hasFlag,
|
|
addFlag,
|
|
removeFlag,
|
|
toggleFlag,
|
|
validateEnumProperty,
|
|
getEnumValues,
|
|
getEnumString
|
|
};
|
|
|
|
export default EnumUtils; |