Co-authored-by: jamesgeorge007 <25279263+jamesgeorge007@users.noreply.github.com> Co-authored-by: nivedin <nivedinp@gmail.com>
85 lines
3.2 KiB
TypeScript
85 lines
3.2 KiB
TypeScript
import { HoppCollection } from "@hoppscotch/data";
|
|
import { entityReference } from "verzod";
|
|
import { describe, expect, test } from "vitest";
|
|
import { z } from "zod";
|
|
|
|
import {
|
|
transformWorkspaceCollections,
|
|
transformWorkspaceEnvironment,
|
|
} from "../../utils/workspace-access";
|
|
import {
|
|
TRANSFORMED_COLLECTIONS_WITHOUT_AUTH_HEADERS_AT_CERTAIN_LEVELS_MOCK,
|
|
TRANSFORMED_DEEPLY_NESTED_COLLECTIONS_WITH_AUTH_HEADERS_MOCK,
|
|
TRANSFORMED_ENVIRONMENT_MOCK,
|
|
WORKSPACE_COLLECTIONS_WITHOUT_AUTH_HEADERS_AT_CERTAIN_LEVELS_MOCK,
|
|
WORKSPACE_DEEPLY_NESTED_COLLECTIONS_WITH_AUTH_HEADERS_MOCK,
|
|
WORKSPACE_ENVIRONMENT_MOCK,
|
|
WORKSPACE_MULTIPLE_CHILD_COLLECTIONS_WITH_AUTH_HEADERS_MOCK,
|
|
} from "./fixtures/workspace-access.mock";
|
|
|
|
import TRANSFORMED_MULTIPLE_CHILD_COLLECTIONS_WITH_AUTH_HEADERS_MOCK from "../e2e/fixtures/collections/multiple-child-collections-auth-headers-coll.json";
|
|
|
|
// Helper function to validate against `HoppCollection` schema and apply relevant migrations
|
|
const migrateCollections = (collections: unknown[]): HoppCollection[] => {
|
|
const collectionSchemaParsedResult = z
|
|
.array(entityReference(HoppCollection))
|
|
.safeParse(collections);
|
|
|
|
if (!collectionSchemaParsedResult.success) {
|
|
throw new Error(
|
|
`Incoming collections failed schema validation: ${JSON.stringify(collections, null, 2)}`
|
|
);
|
|
}
|
|
|
|
return collectionSchemaParsedResult.data.map(
|
|
({ _ref_id, folders, ...rest }) => {
|
|
return {
|
|
...rest,
|
|
folders: migrateCollections(folders),
|
|
};
|
|
}
|
|
);
|
|
};
|
|
|
|
describe("workspace-access", () => {
|
|
describe("transformWorkspaceCollection", () => {
|
|
test("Successfully transforms collection data with deeply nested collections and authorization/headers set at each level to the `HoppCollection` format", () => {
|
|
expect(
|
|
transformWorkspaceCollections(
|
|
WORKSPACE_DEEPLY_NESTED_COLLECTIONS_WITH_AUTH_HEADERS_MOCK
|
|
)
|
|
).toEqual(TRANSFORMED_DEEPLY_NESTED_COLLECTIONS_WITH_AUTH_HEADERS_MOCK);
|
|
});
|
|
|
|
test("Successfully transforms collection data with multiple child collections and authorization/headers set at each level to the `HoppCollection` format", () => {
|
|
const migratedCollections = migrateCollections([
|
|
TRANSFORMED_MULTIPLE_CHILD_COLLECTIONS_WITH_AUTH_HEADERS_MOCK,
|
|
]);
|
|
|
|
expect(
|
|
transformWorkspaceCollections(
|
|
WORKSPACE_MULTIPLE_CHILD_COLLECTIONS_WITH_AUTH_HEADERS_MOCK
|
|
)
|
|
).toEqual(migratedCollections);
|
|
});
|
|
|
|
test("Adds the default value for `auth` & `header` fields while transforming collections without authorization/headers set at certain levels", () => {
|
|
expect(
|
|
transformWorkspaceCollections(
|
|
WORKSPACE_COLLECTIONS_WITHOUT_AUTH_HEADERS_AT_CERTAIN_LEVELS_MOCK
|
|
)
|
|
).toEqual(
|
|
TRANSFORMED_COLLECTIONS_WITHOUT_AUTH_HEADERS_AT_CERTAIN_LEVELS_MOCK
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("transformWorkspaceEnvironment", () => {
|
|
test("Successfully transforms environment data conforming to the format received from the network call to the `HoppEnvironment` format", () => {
|
|
expect(transformWorkspaceEnvironment(WORKSPACE_ENVIRONMENT_MOCK)).toEqual(
|
|
TRANSFORMED_ENVIRONMENT_MOCK
|
|
);
|
|
});
|
|
});
|
|
});
|