Development (#94)
* CEC-371 Car ECU display (#79) * Merge Development (#53) * Use responsive iframe control for charts (#49) * Use responsive iframe control to charts * Move external Grafana link to Dashboard page * Remove unused embedded style class * Add button label * added delete button to deploy packages * Fix unit test warning Remove unused route from test * Fix styling of button * minor fixes per pr review Co-authored-by: jcw-fisker <jwatson@fiskerinc.com> Co-authored-by: John Cotten Watson <83605808+jcw-fisker@users.noreply.github.com> * Development Merge (#57) * CEC-287 Car connection status (#59) (#60) * Car connection status * Formatting * Merge Development (#64) * Add connection status to vehicles page * ConnectedIcon control * Handle Style * Development (#67) * preliminary map for vehicles * weird zoom bug * passing react tests * fixing warnings and updating snapshots * update node environment to 14 * addressing comments by changing variable types and adding styles to home page title * adding CODEOWNERS file * fixing token error * CEC-371 Update car ECUs display (#78) * Clean up className styles Update car status page to show update and ECUs * Add update ecu version button Show all ECUs on car status page Only show car ecus for search Co-authored-by: jcw-fisker <jwatson@fiskerinc.com> Co-authored-by: John Cotten Watson <83605808+jcw-fisker@users.noreply.github.com> Co-authored-by: Drew Taylor <69828061+drew-fisker@users.noreply.github.com> * CEC-394 Car update log (#81) * CEC-394 Car update status control * Remove Datadog RUM Remove package update components Move control components into Controls folder Add Car update status page * Display update status log Clean up unused update package code * Remove console.logs * no vars * adding timestamp to vehicle popup * modifying vehicle data query * removing extraneous code * removing console log * Clean up SonarCloud warnings (#83) * Clean up SonarCloud warnings * Bogus security warning * Fix another warning * Fix unauthorized locations request * Fix update progress control * CEC-563 New manifest format (#88) * Add ManifestCreateContext Update create manifest page * Finish UI changes and API integration * Fixes * Fix test * Remove manifest ECU file version and type * Fixes * Add manifest ecu file type control * Fix Sonar warnings * Fix test * Update codeowners * Formatting * CEC-553 Change file type to string (#90) * CEC-553 File type uses string enum * Fix test timeout * Fix * Merge development * Increase timeout * Clean up (#95) * Clean up Mock missing methods * Smell Co-authored-by: jcw-fisker <jwatson@fiskerinc.com> Co-authored-by: John Cotten Watson <83605808+jcw-fisker@users.noreply.github.com> Co-authored-by: Drew Taylor <69828061+drew-fisker@users.noreply.github.com> Co-authored-by: Drew Taylor <dtaylor@fiskerinc.com>
This commit is contained in:
101
src/utils/manifestValidation.js
Normal file
101
src/utils/manifestValidation.js
Normal file
@@ -0,0 +1,101 @@
|
||||
export const validateManifest = (data, accessToken) => {
|
||||
const errors = [];
|
||||
|
||||
if (!accessToken || accessToken.length === 0) {
|
||||
throw new Error("Access token required");
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
throw new Error("Missing manifest data");
|
||||
}
|
||||
|
||||
if (!data.name || data.name.length === 0) {
|
||||
errors.push("name");
|
||||
}
|
||||
|
||||
if (!data.version || data.version.length === 0) {
|
||||
errors.push("version");
|
||||
}
|
||||
|
||||
if (!data.description || data.description.length === 0) {
|
||||
errors.push("description");
|
||||
}
|
||||
|
||||
if (!data.releasenotes || data.releasenotes.length === 0) {
|
||||
errors.push("release notes");
|
||||
}
|
||||
|
||||
if (errors.length > 0)
|
||||
throw new Error(`package ${errors.join(", ")} required`);
|
||||
};
|
||||
|
||||
export const validateManifestECUs = (ecus) => {
|
||||
const ecuKeys = {};
|
||||
|
||||
if (!ecus || ecus.length === 0) throw new Error("ECUs required");
|
||||
|
||||
ecus.forEach((ecu) => validateManifestECU(ecu, ecuKeys));
|
||||
};
|
||||
|
||||
const validateManifestECU = (data, keys) => {
|
||||
const errors = [];
|
||||
const fileKeys = {};
|
||||
|
||||
if (!data) {
|
||||
throw new Error("manifest ECU data required");
|
||||
}
|
||||
|
||||
if (!data.name || data.name.length === 0) {
|
||||
errors.push("name");
|
||||
}
|
||||
|
||||
if (!data.version || data.version.length === 0) {
|
||||
errors.push("version");
|
||||
}
|
||||
|
||||
if (!data.part_number || data.part_number.length === 0) {
|
||||
errors.push("part number");
|
||||
}
|
||||
|
||||
if (!data.files || data.files.length === 0) {
|
||||
errors.push("files");
|
||||
}
|
||||
|
||||
const key = `${data.name} ${data.version} ${data.part_number}`;
|
||||
if (!keys[key]) {
|
||||
keys[key] = true;
|
||||
} else {
|
||||
throw new Error(`ECU ${key} already exists`);
|
||||
}
|
||||
|
||||
if (errors.length > 0)
|
||||
throw new Error(`ECU ${data.name} ${errors.join(", ")} required`);
|
||||
|
||||
data.files.forEach((file) => validateFile(data.name, file, fileKeys));
|
||||
};
|
||||
|
||||
const validateFile = (ecu, file, keys) => {
|
||||
const errors = [];
|
||||
|
||||
if (!file) {
|
||||
throw new Error("File data required");
|
||||
}
|
||||
|
||||
if (!file.filename || file.filename.length === 0) {
|
||||
errors.push("filename");
|
||||
}
|
||||
|
||||
if (!file.offset || file.offset.length === 0) {
|
||||
errors.push("offset");
|
||||
}
|
||||
|
||||
const key = `${file.filename} ${file.version}`;
|
||||
if (!keys[key]) {
|
||||
keys[key] = true;
|
||||
} else {
|
||||
throw new Error(`${ecu} ${key} already exists`);
|
||||
}
|
||||
|
||||
if (errors.length > 0)
|
||||
throw new Error(`${ecu} ${file.filename} ${errors.join(", ")} required`);
|
||||
};
|
||||
Reference in New Issue
Block a user