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
2 changes: 2 additions & 0 deletions lib/src/commands/pull.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const createMockTextItem = (overrides: Partial<TextItem> = {}) => ({
status: "FINAL",
notes: "",
tags: [],
integrated: true,
variableIds: [],
pluralForm: null,
projectId: "project-1",
Expand All @@ -41,6 +42,7 @@ const createMockComponent = (overrides: Partial<Component> = {}) => ({
status: "FINAL",
notes: "",
tags: [],
integrated: true,
variableIds: [],
pluralForm: null,
folderId: null,
Expand Down
2 changes: 2 additions & 0 deletions lib/src/formatters/json.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ describe("JSONFormatter", () => {
status: "FINAL",
notes: "",
tags: [],
integrated: true,
variableIds: [],
projectId: "project-1",
variantId: null,
Expand All @@ -127,6 +128,7 @@ describe("JSONFormatter", () => {
status: "FINAL",
notes: "",
tags: [],
integrated: true,
variableIds: [],
folderId: null,
variantId: null,
Expand Down
236 changes: 235 additions & 1 deletion lib/src/formatters/shared/base.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,101 @@ describe("BaseFormatter", () => {
variants: undefined,
});
});

it("should use projectConfig statuses and integrated when output does not override", () => {
const projectConfig = createMockProjectConfig({
statuses: ["FINAL"],
integrated: true,
});
const output = createMockOutput();
const formatter = new TestBaseFormatter(
output,
projectConfig,
createMockMeta()
);

const filters = formatter.generateTextItemPullFilter();

expect(filters).toEqual({
projects: [],
variants: [],
statuses: ["FINAL"],
integrated: true,
});
});

it("should override statuses with output.statuses when provided", () => {
const projectConfig = createMockProjectConfig({
statuses: ["FINAL"],
integrated: true,
});
const output = createMockOutput({
statuses: ["WIP"],
});
const formatter = new TestBaseFormatter(
output,
projectConfig,
createMockMeta()
);

const filters = formatter.generateTextItemPullFilter();

expect(filters).toEqual({
projects: [],
variants: [],
statuses: ["WIP"],
integrated: true,
});
});

it("should override integrated with output.integrated when provided", () => {
const projectConfig = createMockProjectConfig({
statuses: ["FINAL"],
integrated: true,
});
const output = createMockOutput({
integrated: false,
});
const formatter = new TestBaseFormatter(
output,
projectConfig,
createMockMeta()
);

const filters = formatter.generateTextItemPullFilter();

expect(filters).toEqual({
projects: [],
variants: [],
statuses: ["FINAL"],
integrated: false,
});
});

it("should override statuses and integrated when both are provided in output", () => {
const projectConfig = createMockProjectConfig({
statuses: ["FINAL"],
integrated: true,
});
const output = createMockOutput({
statuses: ["WIP"],
integrated: false,
});
const formatter = new TestBaseFormatter(
output,
projectConfig,
createMockMeta()
);

const filters = formatter.generateTextItemPullFilter();

expect(filters).toEqual({
projects: [],
variants: [],
statuses: ["WIP"],
integrated: false,
});
});
});

/***********************************************************
Expand Down Expand Up @@ -282,6 +377,90 @@ describe("BaseFormatter", () => {
});
expect(filters.folders).toBeUndefined();
});

it("should use statuses and integrated from projectConfig when output does not override", () => {
const filters = getComponentPullFilters({
components: {
folders: [{ id: "folder1" }],
},
statuses: ["WIP"],
integrated: true,
});

expect(filters).toEqual({
folders: [{ id: "folder1" }],
variants: [],
statuses: ["WIP"],
integrated: true,
});
});

it("should override statuses with output.statuses when provided", () => {
const filters = getComponentPullFilters(
{
components: {
folders: [{ id: "folder1" }],
},
statuses: ["FINAL"],
integrated: true,
},
{
statuses: ["WIP"],
}
);

expect(filters).toEqual({
folders: [{ id: "folder1" }],
variants: [],
statuses: ["WIP"],
integrated: true,
});
});

it("should override integrated with output.integrated when provided", () => {
const filters = getComponentPullFilters(
{
components: {
folders: [{ id: "folder1" }],
},
statuses: ["FINAL"],
integrated: true,
},
{
integrated: false,
}
);

expect(filters).toEqual({
folders: [{ id: "folder1" }],
variants: [],
statuses: ["FINAL"],
integrated: false,
});
});

it("should override statuses and integrated when both are provided in output", () => {
const filters = getComponentPullFilters(
{
components: {
folders: [{ id: "folder1" }],
},
statuses: ["FINAL"],
integrated: true,
},
{
statuses: ["WIP"],
integrated: false,
}
);

expect(filters).toEqual({
folders: [{ id: "folder1" }],
variants: [],
statuses: ["WIP"],
integrated: false,
});
});
});

/***********************************************************
Expand Down Expand Up @@ -315,6 +494,35 @@ describe("BaseFormatter", () => {
expect(params.richText).toBeUndefined();
});

it("should generate query params for provided optional text item filters", () => {
const projectConfig = createMockProjectConfig({
projects: [{ id: "project1" }],
statuses: ["FINAL"],
integrated: true,
});
const output = createMockOutput();
const formatter = new TestBaseFormatter(
output,
projectConfig,
createMockMeta()
);

const params = formatter.generateQueryParams(
formatter.generateTextItemPullFilter()
);

expect(params.filter).toBeDefined();
expect(params.filter).toEqual(expect.any(String));
const parsedFilter = JSON.parse(params.filter);
expect(parsedFilter).toEqual({
projects: [{ id: "project1" }],
variants: [],
statuses: ["FINAL"],
integrated: true,
});
expect(params.richText).toBeUndefined();
});

it("should generate query params with provided component filters", () => {
const projectConfig = createMockProjectConfig({
components: {
Expand Down Expand Up @@ -342,6 +550,33 @@ describe("BaseFormatter", () => {
expect(params.richText).toBeUndefined();
});

it("should generate query params for optional component filters", () => {
const projectConfig = createMockProjectConfig({
statuses: ["WIP"],
integrated: false,
});
const output = createMockOutput();
const formatter = new TestBaseFormatter(
output,
projectConfig,
createMockMeta()
);

const params = formatter.generateQueryParams(
formatter.generateComponentPullFilter()
);

expect(params.filter).toBeDefined();
const parsedFilter = JSON.parse(params.filter);
expect(parsedFilter).toEqual({
folders: [],
variants: [],
statuses: ["WIP"],
integrated: false,
});
expect(params.richText).toBeUndefined();
});

it("should include richText from projectConfig when set", () => {
const projectConfig = createMockProjectConfig({
projects: [{ id: "project1" }],
Expand Down Expand Up @@ -399,4 +634,3 @@ describe("BaseFormatter", () => {
});
});
});

10 changes: 10 additions & 0 deletions lib/src/formatters/shared/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ export default class BaseFormatter<OutputFileType, APIDataType = unknown> {
projects: this.projectConfig.projects,
variants: this.projectConfig.variants,
statuses: this.projectConfig.statuses,
integrated: this.projectConfig.integrated,
};

if (this.output.projects) {
Expand All @@ -54,6 +55,10 @@ export default class BaseFormatter<OutputFileType, APIDataType = unknown> {
filters.statuses = this.output.statuses;
}

if (this.output.integrated !== undefined) {
filters.integrated = this.output.integrated;
}

return filters;
}

Expand All @@ -64,6 +69,7 @@ export default class BaseFormatter<OutputFileType, APIDataType = unknown> {
}),
variants: this.projectConfig.variants,
statuses: this.projectConfig.statuses,
integrated: this.projectConfig.integrated,
};

if (this.output.components) {
Expand All @@ -78,6 +84,10 @@ export default class BaseFormatter<OutputFileType, APIDataType = unknown> {
filters.statuses = this.output.statuses;
}

if (this.output.integrated !== undefined) {
filters.integrated = this.output.integrated;
}

return filters;
}

Expand Down
1 change: 1 addition & 0 deletions lib/src/formatters/shared/baseExport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ export default abstract class BaseExportFormatter<
...super.generateQueryParams({
projects: [{ id: project.id }],
statuses: super.generateTextItemPullFilter().statuses,
integrated: super.generateTextItemPullFilter().integrated,
}),
variantId,
format: this.exportFormat,
Expand Down
2 changes: 2 additions & 0 deletions lib/src/http/components.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ describe("fetchComponents", () => {
richText: "<p>Rich <strong>HTML</strong> text</p>",
status: "FINAL",
notes: "Test note",
integrated: true,
pluralForm: null,
tags: ["tag1"],
variableIds: ["var1"],
Expand Down Expand Up @@ -76,6 +77,7 @@ describe("fetchComponents", () => {
status: "FINAL",
pluralForm: "one",
notes: "",
integrated: true,
tags: [],
variableIds: [],
folderId: null,
Expand Down
4 changes: 3 additions & 1 deletion lib/src/http/textItems.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,10 @@ describe("fetchTextItems", () => {
text: "Plain text",
richText: "<p>Rich <strong>HTML</strong> text</p>",
status: "FINAL",
tags: ["tag1"],
notes: "Test note",
integrated: true,
pluralForm: null,
tags: ["tag1"],
variableIds: ["var1"],
projectId: "project1",
variantId: "variant1",
Expand Down Expand Up @@ -77,6 +78,7 @@ describe("fetchTextItems", () => {
status: "FINAL",
notes: "",
tags: [],
integrated: true,
pluralForm: null,
variableIds: [],
projectId: "project1",
Expand Down
Loading
Loading