Skip to content
Draft
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
1 change: 1 addition & 0 deletions .speakeasy/workflow.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ speakeasyVersion: latest
sources:
glean-api-specs:
inputs:
- location: generated_specs/platform.yaml
- location: generated_specs/client_rest.yaml
- location: generated_specs/indexing.yaml
- location: generated_specs/admin_rest.yaml
Expand Down
127 changes: 127 additions & 0 deletions tests/post_transform_smoke.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,14 @@ const SPEC_PATH = path.join(
'overlayed_specs',
'glean-merged-spec.yaml',
);
const PLATFORM_SPEC_PATH = path.join(
process.cwd(),
'generated_specs',
'platform.yaml',
);

const loadSpec = () => yaml.load(fs.readFileSync(SPEC_PATH, 'utf8'));
const hasGeneratedPlatformSpec = () => fs.existsSync(PLATFORM_SPEC_PATH);

describe('Post-transformation smoke tests', () => {
let spec;
Expand Down Expand Up @@ -50,6 +56,20 @@ describe('Post-transformation smoke tests', () => {
expect(spec.info?.title).toBe('Glean API');
});

test('merged spec keeps existing version and source traceability', () => {
expect(spec.info?.version).toBe('0.9.0');
expect(spec.info?.['x-source-commit-sha']).toBeDefined();
expect(spec.info?.['x-open-api-commit-sha']).toBeDefined();
});

test('existing merged tag groups are preserved', () => {
const tagGroupNames = (spec['x-tagGroups'] ?? []).map(({ name }) => name);

expect(tagGroupNames).toContain('Search & Generative AI');
expect(tagGroupNames).toContain('Connected Content');
expect(tagGroupNames).not.toEqual(['AI', 'Data Retrieval']);
});

test('all paths use expected base prefixes', () => {
const paths = Object.keys(spec.paths ?? {});

Expand Down Expand Up @@ -130,4 +150,111 @@ describe('Post-transformation smoke tests', () => {
'#/components/schemas/CustomMetadataPropertyDefinition',
);
});

test('Platform operations land under expected SDK groups', () => {
if (!hasGeneratedPlatformSpec()) {
return;
}

const platformOps = [
{
path: '/api/documents/batch',
method: 'post',
group: 'platform.documents',
nameOverride: 'batch',
},
{
path: '/api/documents/{id}/permissions',
method: 'get',
group: 'platform.documents',
nameOverride: 'getPermissions',
},
{
path: '/api/people/search',
method: 'post',
group: 'platform.people',
nameOverride: 'search',
},
{
path: '/api/agents/search',
method: 'post',
group: 'platform.agents',
nameOverride: 'search',
},
{
path: '/api/agents/{agent_id}',
method: 'get',
group: 'platform.agents',
nameOverride: 'get',
},
{
path: '/api/agents/{agent_id}/schemas',
method: 'get',
group: 'platform.agents',
nameOverride: 'getSchemas',
},
{
path: '/api/agents/{agent_id}/runs',
method: 'post',
group: 'platform.agents',
nameOverride: 'createRun',
},
{
path: '/api/search',
method: 'post',
group: 'platform.search',
nameOverride: 'query',
},
{
path: '/api/tools',
method: 'get',
group: 'platform.tools',
nameOverride: 'list',
},
{
path: '/api/tools/call',
method: 'post',
group: 'platform.tools',
nameOverride: 'call',
},
{
path: '/api/summarize',
method: 'post',
group: 'platform.summarize',
nameOverride: 'create',
},
];

for (const { path, method, group, nameOverride } of platformOps) {
const operation = spec.paths?.[path]?.[method];

expect(
operation,
`expected operation ${method.toUpperCase()} ${path}`,
).toBeDefined();
expect(operation['x-speakeasy-group']).toBe(group);
expect(operation['x-speakeasy-name-override']).toBe(nameOverride);
expect(operation['x-glean-sdk']).toBeUndefined();
}
});

test('Platform merged spec retains streaming run response', () => {
if (!hasGeneratedPlatformSpec()) {
return;
}

const operation = spec.paths?.['/api/agents/{agent_id}/runs']?.post;

expect(operation?.responses?.['200']?.content).toHaveProperty(
'text/event-stream',
);
});

test('Platform private runtime gates do not reach merged spec', () => {
if (!hasGeneratedPlatformSpec()) {
return;
}

expect(JSON.stringify(spec)).not.toContain('gated-by');
});
});