From 8a2a54050b163753034d019ad7e9edc03c4ae4ae Mon Sep 17 00:00:00 2001 From: DevSide Date: Tue, 29 Oct 2024 19:40:13 +0100 Subject: [PATCH] refactor: continue moving test in yml and fix puppeteer --- packages/dynamock/test/integrations.spec.ts | 169 ------------------ packages/puppeteer/src/index.ts | 22 ++- packages/puppeteer/test/puppeteer.spec.ts | 4 +- .../{put-invalid.yml => invalid-put.yml} | 0 .../fixtures/conflict/conflict-all.yml | 38 ++++ .../fixtures/conflict/conflict-cookies.yml | 26 +++ .../fixtures/conflict/conflict-headers.yml | 26 +++ .../conflict/conflict-method-path.yml | 46 +++++ .../fixtures/conflict/conflict-no-cookies.yml | 32 ++++ .../fixtures/conflict/conflict-no-headers.yml | 32 ++++ .../fixtures/conflict/conflict-no-query.yml | 32 ++++ .../fixtures/conflict/conflict-no-values.yml | 36 ++++ .../fixtures/conflict/conflict-query.yml | 26 +++ .../fixtures/conflict/no-conflict-cookies.yml | 37 ++++ .../fixtures/conflict/no-conflict-headers.yml | 37 ++++ .../fixtures/conflict/no-conflict-method.yml | 20 +++ .../fixtures/conflict/no-conflict-path.yml | 20 +++ .../fixtures/conflict/no-conflict-query.yml | 37 ++++ .../matching/matching-path-multiple.yml | 17 ++ .../matching/matching-path-regexp.yml | 128 +++++++++++++ .../matching/matching-path-simple.yml | 17 ++ .../fixtures/matching/matching-path-star.yml | 26 +++ .../matching/no-matching-path-subpath.yml | 24 +++ .../no-matching-path-trailing-reverse.yml | 17 ++ .../matching/no-matching-path-trailing.yml | 17 ++ .../validation/invalid-request-headers.yml | 35 ++++ .../invalid-request-options-headers.yml | 27 +++ .../invalid-request-options-method.yml | 26 +++ .../invalid-request-options-path.yml | 26 +++ .../validation/valid-request-body.yml | 77 ++++++++ .../validation/valid-request-headers.yml | 34 ++++ .../validation/valid-request-method.yml | 140 +++++++++++++++ .../valid-request-options-headers.yml | 68 +++++++ .../valid-request-options-method.yml | 26 +++ .../validation/valid-request-options-path.yml | 26 +++ 35 files changed, 1196 insertions(+), 175 deletions(-) rename packages/test-cases/test-files/config/validation/{put-invalid.yml => invalid-put.yml} (100%) create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-all.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-cookies.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-headers.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-method-path.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-no-cookies.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-no-headers.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-no-query.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-no-values.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/conflict-query.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/no-conflict-cookies.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/no-conflict-headers.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/no-conflict-method.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/no-conflict-path.yml create mode 100644 packages/test-cases/test-files/fixtures/conflict/no-conflict-query.yml create mode 100644 packages/test-cases/test-files/fixtures/matching/matching-path-multiple.yml create mode 100644 packages/test-cases/test-files/fixtures/matching/matching-path-regexp.yml create mode 100644 packages/test-cases/test-files/fixtures/matching/matching-path-simple.yml create mode 100644 packages/test-cases/test-files/fixtures/matching/matching-path-star.yml create mode 100644 packages/test-cases/test-files/fixtures/matching/no-matching-path-subpath.yml create mode 100644 packages/test-cases/test-files/fixtures/matching/no-matching-path-trailing-reverse.yml create mode 100644 packages/test-cases/test-files/fixtures/matching/no-matching-path-trailing.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/invalid-request-headers.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/invalid-request-options-headers.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/invalid-request-options-method.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/invalid-request-options-path.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/valid-request-body.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/valid-request-headers.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/valid-request-method.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/valid-request-options-headers.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/valid-request-options-method.yml create mode 100644 packages/test-cases/test-files/fixtures/validation/valid-request-options-path.yml diff --git a/packages/dynamock/test/integrations.spec.ts b/packages/dynamock/test/integrations.spec.ts index a928f78..fb48871 100644 --- a/packages/dynamock/test/integrations.spec.ts +++ b/packages/dynamock/test/integrations.spec.ts @@ -34,63 +34,6 @@ describe('integrations.js', () => { }) }) - describe('validation fixture', () => { - test.each([ - // request path / method - [{ path: '/', method: 'head' }, { body: '' }, true], - [{ path: '/', method: 'HEAD' }, { body: '' }, true], - [{ path: '/', method: 'delete' }, { body: '' }, true], - [{ path: '/', method: 'put' }, { body: '' }, true], - [{ path: '/', method: 'post' }, { body: '' }, true], - [{ path: '/', method: 'get' }, { body: '' }, true], - [{ path: '/', method: 'options' }, { body: '' }, true], - [{ path: '/', method: 'patch' }, { body: '' }, true], - - // request body - [{ method: 'get', path: '/', body: '' }, { body: '' }, true], - [{ method: 'get', path: '/', body: {} }, { body: '' }, true], - [{ method: 'get', path: '/', body: 1 }, { body: '' }, true], - [{ method: 'get', path: '/', body: [] }, { body: '' }, true], - - // request headers - [{ method: 'get', path: '/', headers: {} }, { body: '' }, true], - [{ method: 'get', path: '/', headers: null }, { body: '' }, false], - [{ method: 'get', path: '/', headers: { a: 'b' } }, { body: '' }, true], - [{ method: 'get', path: '/', headers: [] }, { body: '' }, true], - [{ method: 'get', path: '/', headers: [1] }, { body: '' }, false], - [{ method: 'get', path: '/', headers: ['not-in-configuration'] }, { body: '' }, false], - - // request options path - [{ path: '/', method: 'get', options: { path: { allowRegex: true } } }, { body: '' }, true], - [{ path: '/', method: 'get', options: { path: { strict: true } } }, { body: '' }, false], - - // request options method - [{ path: '/', method: 'get', options: { method: { allowRegex: true } } }, { body: '' }, true], - [{ path: '/', method: 'get', options: { method: { strict: true } } }, { body: '' }, false], - - // request options headers - [{ path: '/', method: 'get', options: { headers: { strict: true, allowRegex: true } } }, { body: '' }, false], - [{ path: '/', method: 'get', options: { headers: { strict: true, allowRegex: false } } }, { body: '' }, true], - [{ path: '/', method: 'get', options: { headers: { strict: false, allowRegex: false } } }, { body: '' }, true], - [{ path: '/', method: 'get', options: { headers: { strict: true } } }, { body: '' }, true], - [{ path: '/', method: 'get', options: { headers: { strict: false, allowRegex: true } } }, { body: '' }, true], - [{ path: '/', method: 'get', options: { headers: { allowRegex: true } } }, { body: '' }, true], - ])('validate request="%o" response="%o" isValid=%s', async (req, resp, isValid) => { - await request - .post('/___fixtures') - .send({ request: req, response: resp }) - .expect(isValid ? 201 : 400) - - // Same error in bulk - if (!isValid) { - await request - .post('/___fixtures/bulk') - .send([{ request: { method: 'get', path: '/' } }, { request: req, response: resp }]) - .expect(400) - } - }) - }) - describe('create and delete fixtures', () => { // Special case: // We need the same supertest/server port in order to reproduce the sha1 of a fixture @@ -153,103 +96,6 @@ describe('integrations.js', () => { }) }) - describe('conflicts fixtures', () => { - test.each([ - // Conflicts - [null, { method: 'get', path: '/products' }, { method: 'get', path: '/products' }, true], - [ - null, - { method: 'get', path: '/products', headers: {}, cookies: {}, query: {} }, - { method: 'get', path: '/products' }, - true, - ], - [ - null, - { method: 'get', path: '/products', headers: { a: 'a' }, cookies: { a: 'a' } }, - { method: 'get', path: '/products', cookies: { a: 'a' }, headers: { a: 'a' } }, - true, - ], - [ - null, - { method: 'get', path: '/products', headers: [], cookies: [], query: [] }, - { method: 'get', path: '/products' }, - true, - ], - [ - null, - { - method: 'get', - path: '/products', - headers: { a: 'a', b: 'b' }, - cookies: { a: 'a', b: 'b' }, - query: { a: 'a', b: 'b' }, - }, - { - method: 'get', - path: '/products', - headers: { b: 'b', a: 'a' }, - cookies: { a: 'a', b: 'b' }, - query: { a: 'a', b: 'b' }, - }, - true, - ], - // No conflicts - [null, { method: 'get', path: '/products' }, { method: 'post', path: '/products' }, false], - [null, { method: 'post', path: '/products' }, { method: 'get', path: '/products' }, false], - [null, { method: 'get', path: '/products' }, { method: 'get', path: '/categories' }, false], - [null, { method: 'get', path: '/categories' }, { method: 'get', path: '/products' }, false], - ])( - 'conflict situation config="%o" requestA="%o" requestB="%o" shouldConflict=%s', - async (configuration, requestA, requestB, shouldConflict) => { - if (configuration) { - await request - .put('/___config') - .send({ - headers: configuration, - }) - .expect(200) - } - - // Check if combining fixtures in a single request also failed - await request - .post('/___fixtures/bulk') - .send( - [requestA, requestB].map((request) => ({ - request: request, - response: { - body: {}, - }, - })), - ) - .expect(shouldConflict ? 409 : 201) - - if (!shouldConflict) { - await request.delete('/___fixtures') - } - - await request - .post('/___fixtures') - .send({ - request: requestA, - response: { - body: {}, - }, - }) - .expect(201) - - await request - .post('/___fixtures') - .send({ - request: requestB, - response: { - body: {}, - }, - }) - .expect(shouldConflict ? 409 : 201) - }, - ) - }) - describe('CORS', () => { test('allow all', async () => { await request.put('/___config').send({ cors: '*' }).expect(200) @@ -287,28 +133,13 @@ describe('integrations.js', () => { describe('matching path', () => { test.each([ - ['/a', null, '/a', true], - ['*', null, '/a', true], - ['*', null, '/a/b', true], ['/ a', null, '/ a', true], ['/ a', null, '/%20a', true], ['/%20a', null, '/ a', false], ['/%20a', null, '/%20a', false], - ['/a', null, '/a/', false], - ['/a/', null, '/a', false], - ['/a/b', null, '/a/b', true], - ['/a/b', null, '/a', false], - ['/a/b', null, '/b', false], - ['/a/b', null, '/a/', false], - ['/a/b', null, '/b/', false], ['/%20a', { disableEncodeURI: true }, '/ a', true], ['/%20a', { disableEncodeURI: true }, '/%20a', true], - ['//a/', { allowRegex: true }, '/a', true], ['//%20a/', { allowRegex: true }, '/ a', true], - ['//a/', { allowRegex: true }, '/a/b', true], - ['/^/a/', { allowRegex: true }, '/a/b', true], - ['/^/a$/', { allowRegex: true }, '/a/b', false], - ['/^(/(a|b))+$/', { allowRegex: true }, '/a/b', true], ])('matching path match="%s" options="%o" test="%s" result=%s', async (matchPath, options, path, shouldMatch) => { const method = 'get' diff --git a/packages/puppeteer/src/index.ts b/packages/puppeteer/src/index.ts index 3fa7e55..37eb06d 100644 --- a/packages/puppeteer/src/index.ts +++ b/packages/puppeteer/src/index.ts @@ -61,15 +61,29 @@ function mapToCoreRequest(request: HTTPRequest): CoreRequest { } function mapToFixtureType(fixture: FixturePuppeteerType): FixtureType { - const parsedUrl = new URL(fixture.request.url) - const { url, ...request } = fixture.request + const url = fixture.request.url + let origin = '' + let path = '' + + try { + const parsedUrl = new URL(url) + origin = parsedUrl.origin + path = parsedUrl.toString().replace(parsedUrl.origin, '') + } catch (error) { + if (url.endsWith('*')) { + const parsedUrl = new URL(url.slice(0, -1)) + origin = parsedUrl.origin + path = '*' + } + } + const { url: remove, ...request } = fixture.request return { ...fixture, request: { ...request, - origin: parsedUrl.origin, - path: parsedUrl.toString().replace(parsedUrl.origin, ''), + origin, + path, }, } } diff --git a/packages/puppeteer/test/puppeteer.spec.ts b/packages/puppeteer/test/puppeteer.spec.ts index ad6b4a9..b29a481 100644 --- a/packages/puppeteer/test/puppeteer.spec.ts +++ b/packages/puppeteer/test/puppeteer.spec.ts @@ -4,7 +4,7 @@ import { ActionEnum, getTestFiles, wrapError } from '@dynamock/test-cases' import { getPuppeteerTestCases } from './config/getTestCases.js' describe('puppeteer integration tests', () => { - const allTests = getTestFiles() //.filter(([filePath]) => filePath.endsWith('create-and-delete-bulk.yml')) + const allTests = getTestFiles().filter(([filePath]) => filePath.endsWith('.yml')) beforeEach(() => page.goto('http://127.0.0.1:3000/index.html')) @@ -27,7 +27,7 @@ describe('puppeteer integration tests', () => { case ActionEnum.post_fixtures_bulk: case ActionEnum.delete_fixture: case ActionEnum.delete_all_fixtures: { - if (expectation.status === 400) { + if (expectation.status === 400 || expectation.status === 409) { try { await dynamock(page, action.data) } catch (error: unknown) { diff --git a/packages/test-cases/test-files/config/validation/put-invalid.yml b/packages/test-cases/test-files/config/validation/invalid-put.yml similarity index 100% rename from packages/test-cases/test-files/config/validation/put-invalid.yml rename to packages/test-cases/test-files/config/validation/invalid-put.yml diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-all.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-all.yml new file mode 100644 index 0000000..8f94086 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-all.yml @@ -0,0 +1,38 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: + a: "a" + b: "b" + cookies: + c: "c" + d: "d" + query: + e: "e" + f: "f" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: + a: "a" + b: "b" + cookies: + c: "c" + d: "d" + query: + e: "e" + f: "f" + response: + status: 200 + expectation: + status: 409 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-cookies.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-cookies.yml new file mode 100644 index 0000000..54bdba4 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-cookies.yml @@ -0,0 +1,26 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + cookies: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + cookies: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 409 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-headers.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-headers.yml new file mode 100644 index 0000000..c672f94 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-headers.yml @@ -0,0 +1,26 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 409 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-method-path.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-method-path.yml new file mode 100644 index 0000000..6a97cb3 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-method-path.yml @@ -0,0 +1,46 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + response: + status: 200 + expectation: + status: 409 +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: {} + cookies: {} + query: {} + response: + status: 200 + expectation: + status: 409 +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: [] + cookies: [] + query: [] + response: + status: 200 + expectation: + status: 409 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-no-cookies.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-no-cookies.yml new file mode 100644 index 0000000..dd3a0aa --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-no-cookies.yml @@ -0,0 +1,32 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + cookies: {} + response: + status: 200 + expectation: + status: 409 +- action: + name: post_fixture + data: + request: + path: /products + method: get + cookies: [] + response: + status: 200 + expectation: + status: 409 diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-no-headers.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-no-headers.yml new file mode 100644 index 0000000..2851935 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-no-headers.yml @@ -0,0 +1,32 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: {} + response: + status: 200 + expectation: + status: 409 +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: [] + response: + status: 200 + expectation: + status: 409 diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-no-query.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-no-query.yml new file mode 100644 index 0000000..80055b2 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-no-query.yml @@ -0,0 +1,32 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + query: {} + response: + status: 200 + expectation: + status: 409 +- action: + name: post_fixture + data: + request: + path: /products + method: get + query: [] + response: + status: 200 + expectation: + status: 409 diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-no-values.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-no-values.yml new file mode 100644 index 0000000..3dc1f4c --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-no-values.yml @@ -0,0 +1,36 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: {} + cookies: {} + query: {} + response: + status: 200 + expectation: + status: 409 +- action: + name: post_fixture + data: + request: + path: /products + method: get + headers: [] + cookies: [] + query: [] + response: + status: 200 + expectation: + status: 409 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/conflict/conflict-query.yml b/packages/test-cases/test-files/fixtures/conflict/conflict-query.yml new file mode 100644 index 0000000..6691e57 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/conflict-query.yml @@ -0,0 +1,26 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + query: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: get + query: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 409 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/conflict/no-conflict-cookies.yml b/packages/test-cases/test-files/fixtures/conflict/no-conflict-cookies.yml new file mode 100644 index 0000000..594ead7 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/no-conflict-cookies.yml @@ -0,0 +1,37 @@ +- action: + name: post_fixture + data: + request: + path: /1 + method: get + cookies: + a: "a" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /2 + method: get + cookies: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /1 + method: get + cookies: + b: "b" + response: + status: 200 + expectation: + status: 201 diff --git a/packages/test-cases/test-files/fixtures/conflict/no-conflict-headers.yml b/packages/test-cases/test-files/fixtures/conflict/no-conflict-headers.yml new file mode 100644 index 0000000..771aa59 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/no-conflict-headers.yml @@ -0,0 +1,37 @@ +- action: + name: post_fixture + data: + request: + path: /1 + method: get + headers: + a: "a" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /2 + method: get + headers: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /1 + method: get + headers: + b: "b" + response: + status: 200 + expectation: + status: 201 diff --git a/packages/test-cases/test-files/fixtures/conflict/no-conflict-method.yml b/packages/test-cases/test-files/fixtures/conflict/no-conflict-method.yml new file mode 100644 index 0000000..eccb30a --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/no-conflict-method.yml @@ -0,0 +1,20 @@ +- action: + name: post_fixture + data: + request: + path: /products + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /products + method: post + response: + status: 200 + expectation: + status: 201 diff --git a/packages/test-cases/test-files/fixtures/conflict/no-conflict-path.yml b/packages/test-cases/test-files/fixtures/conflict/no-conflict-path.yml new file mode 100644 index 0000000..cbb9b9b --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/no-conflict-path.yml @@ -0,0 +1,20 @@ +- action: + name: post_fixture + data: + request: + path: /1 + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /2 + method: get + response: + status: 200 + expectation: + status: 201 diff --git a/packages/test-cases/test-files/fixtures/conflict/no-conflict-query.yml b/packages/test-cases/test-files/fixtures/conflict/no-conflict-query.yml new file mode 100644 index 0000000..f18694f --- /dev/null +++ b/packages/test-cases/test-files/fixtures/conflict/no-conflict-query.yml @@ -0,0 +1,37 @@ +- action: + name: post_fixture + data: + request: + path: /1 + method: get + query: + a: "a" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /2 + method: get + query: + a: "a" + b: "b" + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /1 + method: get + query: + b: "b" + response: + status: 200 + expectation: + status: 201 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/matching/matching-path-multiple.yml b/packages/test-cases/test-files/fixtures/matching/matching-path-multiple.yml new file mode 100644 index 0000000..7313fe8 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/matching/matching-path-multiple.yml @@ -0,0 +1,17 @@ +- action: + name: post_fixture + data: + request: + path: /a/b + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a/b + method: get + expectation: + status: 200 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/matching/matching-path-regexp.yml b/packages/test-cases/test-files/fixtures/matching/matching-path-regexp.yml new file mode 100644 index 0000000..2d892b7 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/matching/matching-path-regexp.yml @@ -0,0 +1,128 @@ +- action: + name: post_fixture + data: + request: + path: //a/ + method: get + options: + path: + allowRegex: true + response: + status: 200 + options: + lifetime: 3 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a + method: get + expectation: + status: 200 +- action: + name: test_fixture + data: + path: /a/b + method: get + expectation: + status: 200 +- action: + name: test_fixture + data: + path: /b/a + method: get + expectation: + status: 200 +- action: + name: post_fixture + data: + request: + path: /^/a/ + method: get + options: + path: + allowRegex: true + response: + status: 200 + options: + lifetime: 2 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a + method: get + expectation: + status: 200 +- action: + name: test_fixture + data: + path: /a/b + method: get + expectation: + status: 200 +- action: + name: test_fixture + data: + path: /b + method: get + expectation: + status: 404 +- action: + name: post_fixture + data: + request: + path: /^/a$/ + method: get + options: + path: + allowRegex: true + response: + status: 200 + options: + lifetime: 1 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a/b + method: get + expectation: + status: 404 +- action: + name: test_fixture + data: + path: /b/a + method: get + expectation: + status: 404 +- action: + name: test_fixture + data: + path: /a + method: get + expectation: + status: 200 +- action: + name: post_fixture + data: + request: + path: /^(/(a|b))+$/ + method: get + options: + path: + allowRegex: true + response: + status: 200 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a/b + method: get + expectation: + status: 200 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/matching/matching-path-simple.yml b/packages/test-cases/test-files/fixtures/matching/matching-path-simple.yml new file mode 100644 index 0000000..61a5931 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/matching/matching-path-simple.yml @@ -0,0 +1,17 @@ +- action: + name: post_fixture + data: + request: + path: /a + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a + method: get + expectation: + status: 200 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/matching/matching-path-star.yml b/packages/test-cases/test-files/fixtures/matching/matching-path-star.yml new file mode 100644 index 0000000..941b9f1 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/matching/matching-path-star.yml @@ -0,0 +1,26 @@ +- action: + name: post_fixture + data: + request: + path: '*' + method: get + response: + status: 200 + options: + lifetime: 0 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: "/a" + method: get + expectation: + status: 200 +- action: + name: test_fixture + data: + path: "/a/b" + method: get + expectation: + status: 200 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/matching/no-matching-path-subpath.yml b/packages/test-cases/test-files/fixtures/matching/no-matching-path-subpath.yml new file mode 100644 index 0000000..125a8af --- /dev/null +++ b/packages/test-cases/test-files/fixtures/matching/no-matching-path-subpath.yml @@ -0,0 +1,24 @@ +- action: + name: post_fixture + data: + request: + path: /a/b + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a + method: get + expectation: + status: 404 +- action: + name: test_fixture + data: + path: /b + method: get + expectation: + status: 404 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/matching/no-matching-path-trailing-reverse.yml b/packages/test-cases/test-files/fixtures/matching/no-matching-path-trailing-reverse.yml new file mode 100644 index 0000000..9903958 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/matching/no-matching-path-trailing-reverse.yml @@ -0,0 +1,17 @@ +- action: + name: post_fixture + data: + request: + path: /a/ + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a + method: get + expectation: + status: 404 diff --git a/packages/test-cases/test-files/fixtures/matching/no-matching-path-trailing.yml b/packages/test-cases/test-files/fixtures/matching/no-matching-path-trailing.yml new file mode 100644 index 0000000..141052b --- /dev/null +++ b/packages/test-cases/test-files/fixtures/matching/no-matching-path-trailing.yml @@ -0,0 +1,17 @@ +- action: + name: post_fixture + data: + request: + path: /a + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: test_fixture + data: + path: /a/ + method: get + expectation: + status: 404 diff --git a/packages/test-cases/test-files/fixtures/validation/invalid-request-headers.yml b/packages/test-cases/test-files/fixtures/validation/invalid-request-headers.yml new file mode 100644 index 0000000..504baef --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/invalid-request-headers.yml @@ -0,0 +1,35 @@ +- action: + name: post_fixture + data: + request: + path: / + method: post + headers: null + response: + status: 200 + expectation: + status: 400 +- action: + name: post_fixture + data: + request: + path: / + method: post + headers: + - 1 + response: + status: 200 + expectation: + status: 400 +- action: + name: post_fixture + data: + request: + path: / + method: post + headers: + - not-in-configuration + response: + status: 200 + expectation: + status: 400 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/validation/invalid-request-options-headers.yml b/packages/test-cases/test-files/fixtures/validation/invalid-request-options-headers.yml new file mode 100644 index 0000000..d7eee2b --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/invalid-request-options-headers.yml @@ -0,0 +1,27 @@ +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + headers: + strict: true + allowRegex: true + response: + status: 200 + expectation: + status: 400 +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + headers: + unknown: unknown + response: + status: 200 + expectation: + status: 400 diff --git a/packages/test-cases/test-files/fixtures/validation/invalid-request-options-method.yml b/packages/test-cases/test-files/fixtures/validation/invalid-request-options-method.yml new file mode 100644 index 0000000..4cb9fc3 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/invalid-request-options-method.yml @@ -0,0 +1,26 @@ +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + method: + unknown: true + response: + status: 200 + expectation: + status: 400 +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + method: + allowRegex: test + response: + status: 200 + expectation: + status: 400 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/validation/invalid-request-options-path.yml b/packages/test-cases/test-files/fixtures/validation/invalid-request-options-path.yml new file mode 100644 index 0000000..dfb04f3 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/invalid-request-options-path.yml @@ -0,0 +1,26 @@ +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + path: + unknown: true + response: + status: 200 + expectation: + status: 400 +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + path: + allowRegex: test + response: + status: 200 + expectation: + status: 400 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/validation/valid-request-body.yml b/packages/test-cases/test-files/fixtures/validation/valid-request-body.yml new file mode 100644 index 0000000..a3ed8bc --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/valid-request-body.yml @@ -0,0 +1,77 @@ +- action: + name: post_fixture + data: + request: + path: /body-undefined + method: post + body: + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /body-empty-string + method: post + body: '' + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /body-empty-object + method: post + body: {} + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /body-number + method: post + body: 1 + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /body-zero + method: post + body: 0 + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /body-array + method: post + body: [] + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /body-null + method: post + body: null + response: + status: 200 + expectation: + status: 201 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/validation/valid-request-headers.yml b/packages/test-cases/test-files/fixtures/validation/valid-request-headers.yml new file mode 100644 index 0000000..8f63e14 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/valid-request-headers.yml @@ -0,0 +1,34 @@ +- action: + name: post_fixture + data: + request: + path: /headers-empty-object + method: post + headers: {} + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /headers-empty-array + method: post + headers: [] + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /headers-object + method: post + headers: + a: "b" + response: + status: 200 + expectation: + status: 201 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/validation/valid-request-method.yml b/packages/test-cases/test-files/fixtures/validation/valid-request-method.yml new file mode 100644 index 0000000..ac5416e --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/valid-request-method.yml @@ -0,0 +1,140 @@ +- action: + name: post_fixture + data: + request: + path: /lower + method: head + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /upper + method: HEAD + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /lower + method: get + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /upper + method: GET + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /lower + method: post + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /upper + method: POST + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /lower + method: put + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /upper + method: PUT + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /lower + method: patch + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /upper + method: PATCH + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /lower + method: options + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /upper + method: OPTIONS + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /lower + method: delete + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /upper + method: DELETE + response: + status: 200 + expectation: + status: 201 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/validation/valid-request-options-headers.yml b/packages/test-cases/test-files/fixtures/validation/valid-request-options-headers.yml new file mode 100644 index 0000000..52f8fae --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/valid-request-options-headers.yml @@ -0,0 +1,68 @@ +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + headers: + strict: true + allowRegex: false + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + headers: + strict: false + allowRegex: true + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + headers: + strict: false + allowRegex: false + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + headers: + strict: true + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: / + method: post + options: + headers: + allowRegex: true + response: + status: 200 + expectation: + status: 201 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/validation/valid-request-options-method.yml b/packages/test-cases/test-files/fixtures/validation/valid-request-options-method.yml new file mode 100644 index 0000000..c050014 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/valid-request-options-method.yml @@ -0,0 +1,26 @@ +- action: + name: post_fixture + data: + request: + path: /1 + method: post + options: + path: + allowRegex: true + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /2 + method: post + options: + path: + allowRegex: false + response: + status: 200 + expectation: + status: 201 \ No newline at end of file diff --git a/packages/test-cases/test-files/fixtures/validation/valid-request-options-path.yml b/packages/test-cases/test-files/fixtures/validation/valid-request-options-path.yml new file mode 100644 index 0000000..c050014 --- /dev/null +++ b/packages/test-cases/test-files/fixtures/validation/valid-request-options-path.yml @@ -0,0 +1,26 @@ +- action: + name: post_fixture + data: + request: + path: /1 + method: post + options: + path: + allowRegex: true + response: + status: 200 + expectation: + status: 201 +- action: + name: post_fixture + data: + request: + path: /2 + method: post + options: + path: + allowRegex: false + response: + status: 200 + expectation: + status: 201 \ No newline at end of file