diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..fdafa3f --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,41 @@ +name: Release + +on: push + +jobs: + ci: + runs-on: ubuntu-latest + name: CI + steps: + - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: "lts/*" + + - run: npm install + + - run: npm test + working-directory: npm/cli-darwin-arm64 + env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } + + - name: Publish @yaakapp/cli-darwin-x64 + run: npm publish --provenance --access public + working-directory: npm/cli-darwin-x64 + env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } + + - name: Publish @yaakapp/cli-linux-x64 + run: npm publish --provenance --access public + working-directory: npm/cli-linux-x64 + env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } + + - name: Publish @yaakapp/cli-win32-x64 + run: npm publish --provenance --access public + working-directory: npm/cli-win32-x64 + env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } + + - name: Publish @yaakapp/cli + run: npm publish --provenance --access public + working-directory: npm/cli + env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } diff --git a/package.json b/package.json index 1288ed0..8ce4ad1 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "repository": "https://github.com/yaakapp/plugins", "private": true, "scripts": { - "build": "node scripts/build-plugins.cjs" + "build": "node scripts/build-plugins.cjs", + "test": "vitest run" }, "devDependencies": { "jsonpath": "^1.1.1", diff --git a/plugins/exporter-curl/tests/index.test.ts b/plugins/exporter-curl/tests/index.test.ts index d3d3ce3..6d334e0 100644 --- a/plugins/exporter-curl/tests/index.test.ts +++ b/plugins/exporter-curl/tests/index.test.ts @@ -5,9 +5,9 @@ import { pluginHookExport } from '../src'; const ctx = {} as Context; describe('exporter-curl', () => { - test('Exports GET with params', () => { + test('Exports GET with params', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', urlParameters: [ { name: 'a', value: 'aaa' }, @@ -19,9 +19,9 @@ describe('exporter-curl', () => { [`curl 'https://yaak.app'`, `--url-query 'a=aaa'`, `--url-query 'b=bbb'`].join(` \\\n `), ); }); - test('Exports POST with url form data', () => { + test('Exports POST with url form data', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', method: 'POST', bodyType: 'application/x-www-form-urlencoded', @@ -38,9 +38,9 @@ describe('exporter-curl', () => { ); }); - test('Exports PUT with multipart form', () => { + test('Exports PUT with multipart form', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', method: 'PUT', bodyType: 'multipart/form-data', @@ -63,9 +63,9 @@ describe('exporter-curl', () => { ); }); - test('Exports JSON body', () => { + test('Exports JSON body', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', method: 'POST', bodyType: 'application/json', @@ -83,9 +83,9 @@ describe('exporter-curl', () => { ); }); - test('Exports multi-line JSON body', () => { + test('Exports multi-line JSON body', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', method: 'POST', bodyType: 'application/json', @@ -103,9 +103,9 @@ describe('exporter-curl', () => { ); }); - test('Exports headers', () => { + test('Exports headers', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { headers: [ { name: 'a', value: 'aaa' }, { name: 'b', value: 'bbb', enabled: true }, @@ -115,9 +115,9 @@ describe('exporter-curl', () => { ).toEqual([`curl`, `--header 'a: aaa'`, `--header 'b: bbb'`].join(` \\\n `)); }); - test('Basic auth', () => { + test('Basic auth', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', authenticationType: 'basic', authentication: { @@ -128,9 +128,9 @@ describe('exporter-curl', () => { ).toEqual([`curl 'https://yaak.app'`, `--user 'user:pass'`].join(` \\\n `)); }); - test('Broken basic auth', () => { + test('Broken basic auth', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', authenticationType: 'basic', authentication: {}, @@ -138,9 +138,9 @@ describe('exporter-curl', () => { ).toEqual([`curl 'https://yaak.app'`, `--user ':'`].join(` \\\n `)); }); - test('Digest auth', () => { + test('Digest auth', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', authenticationType: 'digest', authentication: { @@ -151,9 +151,9 @@ describe('exporter-curl', () => { ).toEqual([`curl 'https://yaak.app'`, `--digest --user 'user:pass'`].join(` \\\n `)); }); - test('Bearer auth', () => { + test('Bearer auth', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', authenticationType: 'bearer', authentication: { @@ -163,9 +163,9 @@ describe('exporter-curl', () => { ).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer tok'`].join(` \\\n `)); }); - test('Broken bearer auth', () => { + test('Broken bearer auth', async () => { expect( - pluginHookExport(ctx, { + await pluginHookExport(ctx, { url: 'https://yaak.app', authenticationType: 'bearer', authentication: { diff --git a/plugins/importer-curl/tests/index.test.ts b/plugins/importer-curl/tests/index.test.ts index f2aac37..b0fa102 100644 --- a/plugins/importer-curl/tests/index.test.ts +++ b/plugins/importer-curl/tests/index.test.ts @@ -1,8 +1,8 @@ +import { Context, HttpRequest, Model, Workspace } from '@yaakapp/api'; import { describe, expect, test } from 'vitest'; -import { HttpRequest, Model, Workspace } from '../../../src-web/lib/models'; import { pluginHookImport } from '../src'; -const ctx = {}; +const ctx = {} as Context; describe('importer-curl', () => { test('Imports basic GET', () => { @@ -298,7 +298,7 @@ describe('importer-curl', () => { url: 'https://yaak.app', urlParameters: [ { name: 'foo', value: 'bar', enabled: true }, - { name: 'baz', value: 'a%20a', enabled: true }, + { name: 'baz', value: 'a a', enabled: true }, ], }), ], diff --git a/plugins/template-function-response/tests/index.test.ts b/plugins/template-function-response/tests/index.test.ts deleted file mode 100644 index caceb95..0000000 --- a/plugins/template-function-response/tests/index.test.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { pluginHookExport } from '../src'; - -const ctx = {}; - -describe('exporter-curl', () => { - test('Exports GET with params', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - urlParameters: [ - { name: 'a', value: 'aaa' }, - { name: 'b', value: 'bbb', enabled: true }, - { name: 'c', value: 'ccc', enabled: false }, - ], - }), - ).toEqual( - [`curl 'https://yaak.app'`, `--url-query 'a=aaa'`, `--url-query 'b=bbb'`].join(` \\\n `), - ); - }); - test('Exports POST with url form data', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - method: 'POST', - bodyType: 'application/x-www-form-urlencoded', - body: { - form: [ - { name: 'a', value: 'aaa' }, - { name: 'b', value: 'bbb', enabled: true }, - { name: 'c', value: 'ccc', enabled: false }, - ], - }, - }), - ).toEqual( - [`curl -X POST 'https://yaak.app'`, `--data 'a=aaa'`, `--data 'b=bbb'`].join(` \\\n `), - ); - }); - - test('Exports PUT with multipart form', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - method: 'PUT', - bodyType: 'multipart/form-data', - body: { - form: [ - { name: 'a', value: 'aaa' }, - { name: 'b', value: 'bbb', enabled: true }, - { name: 'c', value: 'ccc', enabled: false }, - { name: 'f', file: '/foo/bar.png', contentType: 'image/png' }, - ], - }, - }), - ).toEqual( - [ - `curl -X PUT 'https://yaak.app'`, - `--form 'a=aaa'`, - `--form 'b=bbb'`, - `--form f=@/foo/bar.png;type=image/png`, - ].join(` \\\n `), - ); - }); - - test('Exports JSON body', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - method: 'POST', - bodyType: 'application/json', - body: { - text: `{"foo":"bar's"}`, - }, - headers: [{ name: 'Content-Type', value: 'application/json' }], - }), - ).toEqual( - [ - `curl -X POST 'https://yaak.app'`, - `--header 'Content-Type: application/json'`, - `--data-raw $'{"foo":"bar\\'s"}'`, - ].join(` \\\n `), - ); - }); - - test('Exports multi-line JSON body', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - method: 'POST', - bodyType: 'application/json', - body: { - text: `{"foo":"bar",\n"baz":"qux"}`, - }, - headers: [{ name: 'Content-Type', value: 'application/json' }], - }), - ).toEqual( - [ - `curl -X POST 'https://yaak.app'`, - `--header 'Content-Type: application/json'`, - `--data-raw $'{"foo":"bar",\n"baz":"qux"}'`, - ].join(` \\\n `), - ); - }); - - test('Exports headers', () => { - expect( - pluginHookExport(ctx, { - headers: [ - { name: 'a', value: 'aaa' }, - { name: 'b', value: 'bbb', enabled: true }, - { name: 'c', value: 'ccc', enabled: false }, - ], - }), - ).toEqual([`curl`, `--header 'a: aaa'`, `--header 'b: bbb'`].join(` \\\n `)); - }); - - test('Basic auth', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - authenticationType: 'basic', - authentication: { - username: 'user', - password: 'pass', - }, - }), - ).toEqual([`curl 'https://yaak.app'`, `--user 'user:pass'`].join(` \\\n `)); - }); - - test('Broken basic auth', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - authenticationType: 'basic', - authentication: {}, - }), - ).toEqual([`curl 'https://yaak.app'`, `--user ':'`].join(` \\\n `)); - }); - - test('Digest auth', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - authenticationType: 'digest', - authentication: { - username: 'user', - password: 'pass', - }, - }), - ).toEqual([`curl 'https://yaak.app'`, `--digest --user 'user:pass'`].join(` \\\n `)); - }); - - test('Bearer auth', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - authenticationType: 'bearer', - authentication: { - token: 'tok', - }, - }), - ).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer tok'`].join(` \\\n `)); - }); - - test('Broken bearer auth', () => { - expect( - pluginHookExport(ctx, { - url: 'https://yaak.app', - authenticationType: 'bearer', - authentication: { - username: 'user', - password: 'pass', - }, - }), - ).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer '`].join(` \\\n `)); - }); -});