Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .github/workflows/unit-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ jobs:
- name: Run Unit Tests for Affected Plugins
run: |
for plugin in ${{ steps.changes.outputs.affected_plugins }}; do
echo "Running tests for $plugin..."
npm run test:unit --prefix ./packages/$plugin
done
echo "Checking if tests should run for $plugin..."
if [[ "$plugin" == "contentstack-audit" ]]; then
echo "Running tests for contentstack-audit..."
npm run test:unit --prefix ./packages/contentstack-audit
else
echo "contentstack-audit has not changed. Skipping tests."
fi
done
607 changes: 262 additions & 345 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/contentstack-audit/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@contentstack/cli-audit",
"version": "1.9.1",
"version": "1.10.0",
"description": "Contentstack audit plugin",
"author": "Contentstack CLI",
"homepage": "https://github.com/contentstack/cli",
Expand Down
16 changes: 12 additions & 4 deletions packages/contentstack-audit/src/audit-base-command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
missingTitleFields,
missingRefInCustomRoles,
missingEnvLocalesInAssets,
missingEnvLocalesInEntries
missingEnvLocalesInEntries,
missingMultipleFields
} = await this.scanAndFix();

this.showOutputOnScreen([
Expand All @@ -80,6 +81,7 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
this.showOutputOnScreenWorkflowsAndExtension([{ module: 'Custom Roles', missingRefs: missingRefInCustomRoles }]);
this.showOutputOnScreenWorkflowsAndExtension([{ module: 'Assets', missingRefs: missingEnvLocalesInAssets }]);
this.showOutputOnScreenWorkflowsAndExtension([{ module: 'Entries Missing Locale and Environments', missingRefs: missingEnvLocalesInEntries }])
this.showOutputOnScreenWorkflowsAndExtension([{ module: 'Entries Changed Multiple Fields', missingRefs: missingMultipleFields }])
if (
!isEmpty(missingCtRefs) ||
!isEmpty(missingGfRefs) ||
Expand All @@ -90,7 +92,8 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
!isEmpty(missingTitleFields) ||
!isEmpty(missingRefInCustomRoles) ||
!isEmpty(missingEnvLocalesInAssets) ||
!isEmpty(missingEnvLocalesInEntries)
!isEmpty(missingEnvLocalesInEntries) ||
!isEmpty(missingMultipleFields)
) {
if (this.currentCommand === 'cm:stacks:audit') {
this.log(this.$t(auditMsg.FINAL_REPORT_PATH, { path: this.sharedConfig.reportPath }), 'warn');
Expand Down Expand Up @@ -143,7 +146,8 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
missingTitleFields,
missingRefInCustomRoles,
missingEnvLocalesInAssets,
missingEnvLocalesInEntries;
missingEnvLocalesInEntries,
missingMultipleFields;

for (const module of this.sharedConfig.flags.modules || this.sharedConfig.modules) {
print([
Expand Down Expand Up @@ -182,6 +186,7 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
missingMandatoryFields = missingEntry.missingMandatoryFields ?? {};
missingTitleFields = missingEntry.missingTitleFields ?? {};
missingEnvLocalesInEntries = missingEntry.missingEnvLocale??{};
missingMultipleFields = missingEntry.missingMultipleFields??{};
await this.prepareReport(module, missingEntryRefs);

await this.prepareReport(`Entries_Select_feild`, missingSelectFeild);
Expand All @@ -192,6 +197,8 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma

await this.prepareReport('Entry_Missing_Locale_and_Env_in_Publish_Details', missingEnvLocalesInEntries);

await this.prepareReport('Entry_Multiple_Fields', missingMultipleFields);

break;
case 'workflows':
missingCtRefsInWorkflow = await new Workflows({
Expand Down Expand Up @@ -238,7 +245,8 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
missingTitleFields,
missingRefInCustomRoles,
missingEnvLocalesInAssets,
missingEnvLocalesInEntries
missingEnvLocalesInEntries,
missingMultipleFields
};
}

Expand Down
5 changes: 3 additions & 2 deletions packages/contentstack-audit/src/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,10 @@ const config = {
Entries_Mandatory_feild: 'Entries_Mandatory_feild',
Entries_Title_feild: 'Entries_Title_feild',
Entry_Missing_Locale_and_Env: 'Entry_Missing_Locale_and_Env',
Entry_Missing_Locale_and_Env_in_Publish_Details: 'Entry_Missing_Locale_and_Env_in_Publish_Details'
Entry_Missing_Locale_and_Env_in_Publish_Details: 'Entry_Missing_Locale_and_Env_in_Publish_Details',
Entry_Multiple_Fields: 'Entry_Multiple_Fields'
},
feild_level_modules: ['Entries_Title_feild', 'Entries_Mandatory_feild', 'Entries_Select_feild', 'Entry_Missing_Locale_and_Env_in_Publish_Details'],
feild_level_modules: ['Entries_Title_feild', 'Entries_Mandatory_feild', 'Entries_Select_feild', 'Entry_Missing_Locale_and_Env_in_Publish_Details', 'Entry_Multiple_Fields'],
fixSelectField: false
};

Expand Down
45 changes: 43 additions & 2 deletions packages/contentstack-audit/src/modules/entries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export default class Entries {
protected missingMandatoryFields: Record<string, any> = {};
protected missingTitleFields: Record<string, any> = {};
protected missingEnvLocale: Record<string, any> = {};
protected missingMultipleField: Record<string, any> = {};
public environments: string[] = [];
public entryMetaData: Record<string, any>[] = [];
public moduleName: keyof typeof auditConfig.moduleConfig = 'entries';
Expand Down Expand Up @@ -240,6 +241,7 @@ export default class Entries {
missingMandatoryFields: this.missingMandatoryFields,
missingTitleFields: this.missingTitleFields,
missingEnvLocale: this.missingEnvLocale,
missingMultipleFields: this.missingMultipleField
};
}

Expand Down Expand Up @@ -349,7 +351,26 @@ export default class Entries {
}

for (const child of field?.schema ?? []) {
const { uid } = child;
const { uid, multiple, data_type } = child;

if(multiple && entry[uid] && !Array.isArray(entry[uid])) {
if (!this.missingMultipleField[this.currentUid]) {
this.missingMultipleField[this.currentUid] = [];
}

this.missingMultipleField[this.currentUid].push({
uid: this.currentUid,
name: this.currentTitle,
field_uid: uid,
data_type,
multiple,
tree,
treeStr: tree
.map(({ name }) => name)
.filter((val) => val)
.join(' ➜ '),
});
}
this.missingMandatoryFields[this.currentUid].push(
...this.validateMandatoryFields(
[...tree, { uid: field.uid, name: child.display_name, field: uid }],
Expand Down Expand Up @@ -716,12 +737,32 @@ export default class Entries {
runFixOnSchema(tree: Record<string, unknown>[], schema: ContentTypeSchemaType[], entry: EntryFieldType) {
// NOTE Global field Fix
schema.forEach((field) => {
const { uid, data_type } = field;
const { uid, data_type, multiple } = field;

if (!Object(entry).hasOwnProperty(uid)) {
return;
}

if (multiple && entry[uid] && !Array.isArray(entry[uid])) {
this.missingMultipleField[this.currentUid] ??= [];

this.missingMultipleField[this.currentUid].push({
uid: this.currentUid,
name: this.currentTitle,
field_uid: uid,
data_type,
multiple,
tree,
treeStr: tree
.map(({ name }) => name)
.filter(Boolean)
.join(' ➜ '),
'fixStatus': 'Fixed',
});

entry[uid] = [entry[uid]];
}

switch (data_type) {
case 'global_field':
entry[uid] = this.fixGlobalFieldReferences(
Expand Down
6 changes: 5 additions & 1 deletion packages/contentstack-audit/src/types/content-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ type ContentTypeStruct = {
description: string;
schema?: ContentTypeSchemaType[];
mandatory: boolean;
multiple: boolean;
};

type ModuleConstructorParam = {
Expand All @@ -40,6 +41,7 @@ type CommonDataTypeStruct = {
allow_json_rte: boolean;
} & AnyProperty;
mandatory: boolean;
multiple: boolean;
};

type RefErrorReturnType = {
Expand Down Expand Up @@ -160,7 +162,9 @@ enum OutputColumn {
'publish_environment' = 'publish_environment',
'asset_uid' = 'asset_uid',
'selectedValue' = 'selectedValue',
'fixStatus' = 'fixStatus'
'fixStatus' = 'fixStatus',
'field_uid' = 'field_uid',
'multiple' = 'multiple'
}

export {
Expand Down
2 changes: 1 addition & 1 deletion packages/contentstack-import/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"author": "Contentstack",
"bugs": "https://github.com/contentstack/cli/issues",
"dependencies": {
"@contentstack/cli-audit": "~1.9.1",
"@contentstack/cli-audit": "~1.10.0",
"@contentstack/cli-command": "~1.3.3",
"@contentstack/cli-utilities": "~1.9.0",
"@contentstack/management": "~1.18.4",
Expand Down
2 changes: 1 addition & 1 deletion packages/contentstack/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"prepack": "pnpm compile && oclif manifest && oclif readme"
},
"dependencies": {
"@contentstack/cli-audit": "~1.9.1",
"@contentstack/cli-audit": "~1.10.0",
"@contentstack/cli-auth": "~1.3.25",
"@contentstack/cli-cm-bootstrap": "~1.13.3",
"@contentstack/cli-cm-branches": "~1.3.1",
Expand Down
Loading
Loading