mirror of
https://github.com/n8n-io/n8n.git
synced 2025-02-02 07:01:30 -08:00
7 commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
Iván Ovejero |
dd233bdf7d
|
test: Fix license tests when tenantId is not default (no-changelog) (#6977)
License tests fail if the env has a non-default `tenantId`: <details> <summary>Stack trace</summary> ``` nt -- license > n8n@1.3.0 test /Users/ivov/Development/n8n/packages/cli > pnpm test:sqlite "--" "license" > n8n@1.3.0 test:sqlite /Users/ivov/Development/n8n/packages/cli > N8N_LOG_LEVEL=silent DB_TYPE=sqlite jest "--" "license" FAIL test/unit/License.test.ts License ✕ initializes license manager (8 ms) ✓ attempts to activate license with provided key ✓ renews license (1 ms) ✓ check if feature is enabled (2 ms) ✓ check if sharing feature is enabled (1 ms) ✓ check fetching entitlements ✓ check fetching feature values (1 ms) ✓ check management jwt ✓ getMainPlan() returns the right entitlement (3 ms) ✓ getMainPlan() returns undefined if there is no main plan ● License › initializes license manager expect(jest.fn()).toHaveBeenCalledWith(...expected) - Expected + Received Object { "autoRenewEnabled": true, "autoRenewOffset": 259200, - "deviceFingerprint": Any<Function>, - "loadCertStr": Any<Function>, - "logger": Anything, + "deviceFingerprint": [Function deviceFingerprint], + "loadCertStr": [Function loadCertStr], + "logger": Logger { + "logger": DerivedLogger { + "_events": Object { + "data": [Function ondata], + "end": [Function bound onceWrapper], + "prefinish": [Function prefinish], + }, + "_eventsCount": 3, + "_maxListeners": undefined, + "_readableState": ReadableState { + "autoDestroy": false, + "awaitDrain": 0, + "buffer": BufferList { + "head": null, + "length": 0, + "tail": null, + }, + "decoder": null, + "defaultEncoding": "utf8", + "destroyed": false, + "emitClose": true, + "emittedReadable": false, + "encoding": null, + "endEmitted": false, + "ended": false, + "flowing": true, + "highWaterMark": 16, + "length": 0, + "needReadable": true, + "objectMode": true, + "paused": false, + "pipes": Console { + "__winstonerror": [Function bound transportEvent], + "__winstonwarn": [Function bound transportEvent], + "_events": Object { + "close": [Function bound onceWrapper], + "drain": [Function pipeOnDrainFunctionResult], + "error": Array [ + [Function onerror], + [Function bound transportEvent], + ], + "finish": [Function bound onceWrapper], + "unpipe": Array [ + [Function bound onceWrapper], + [Function onunpipe], + ], + "warn": [Function bound transportEvent], + }, + "_eventsCount": 6, + "_maxListeners": 30, + "_writableState": WritableState { + "autoDestroy": false, + "bufferProcessing": false, + "bufferedRequest": null, + "bufferedRequestCount": 0, + "corked": 0, + "corkedRequestsFree": CorkedRequest { + "entry": null, + "finish": [Function anonymous], + "next": null, + }, + "decodeStrings": true, + "defaultEncoding": "utf8", + "destroyed": false, + "emitClose": true, + "ended": false, + "ending": false, + "errorEmitted": false, + "finalCalled": false, + "finished": false, + "highWaterMark": 16, + "lastBufferedRequest": null, + "length": 0, + "needDrain": false, + "objectMode": true, + "onwrite": [Function anonymous], + "pendingcb": 0, + "prefinished": false, + "sync": true, + "writecb": null, + "writelen": 0, + "writing": false, + }, + "consoleWarnLevels": Object {}, + "eol": " + ", + "format": Printf { + "template": [Function anonymous], + }, + "handleExceptions": undefined, + "handleRejections": undefined, + "level": undefined, + "levels": Object { + "debug": 5, + "error": 0, + "http": 3, + "info": 2, + "silly": 6, + "verbose": 4, + "warn": 1, + }, + "name": "console", + "parent": [Circular], + "silent": undefined, + "stderrLevels": Object {}, + "writable": true, + Symbol(kCapture): false, + }, + "pipesCount": 1, + "readableListening": false, + "reading": false, + "readingMore": false, + "resumeScheduled": true, + "sync": false, + }, + "_transformState": Object { + "afterTransform": [Function bound afterTransform], + "needTransform": false, + "transforming": false, + "writecb": null, + "writechunk": null, + "writeencoding": null, + }, + "_writableState": WritableState { + "autoDestroy": false, + "bufferProcessing": false, + "bufferedRequest": null, + "bufferedRequestCount": 0, + "corked": 0, + "corkedRequestsFree": CorkedRequest { + "entry": null, + "finish": [Function anonymous], + "next": null, + }, + "decodeStrings": true, + "defaultEncoding": "utf8", + "destroyed": false, + "emitClose": true, + "ended": false, + "ending": false, + "errorEmitted": false, + "finalCalled": false, + "finished": false, + "highWaterMark": 16, + "lastBufferedRequest": null, + "length": 0, + "needDrain": false, + "objectMode": true, + "onwrite": [Function anonymous], + "pendingcb": 0, + "prefinished": false, + "sync": true, + "writecb": null, + "writelen": 0, + "writing": false, + }, + "allowHalfOpen": true, + "defaultMeta": null, + "exceptions": ExceptionHandler { + "handlers": Map {}, + "logger": [Circular], + }, + "exitOnError": true, + "format": Format { + "options": Object {}, + }, + "level": "silent", + "levels": Object { + "debug": 5, + "error": 0, + "http": 3, + "info": 2, + "silly": 6, + "verbose": 4, + "warn": 1, + }, + "profilers": Object {}, + "readable": true, + "rejections": RejectionHandler { + "handlers": Map {}, + "logger": [Circular], + }, + "silent": true, + "writable": true, + Symbol(kCapture): false, + }, + }, "productIdentifier": "n8n-1.3.0", - "saveCertStr": Any<Function>, + "saveCertStr": [Function saveCertStr], "server": "https://server.com/v1", - "tenantId": 1, + "tenantId": 1001, }, Number of calls: 1 29 | 30 | test('initializes license manager', async () => { > 31 | expect(LicenseManager).toHaveBeenCalledWith({ | ^ 32 | autoRenewEnabled: true, 33 | autoRenewOffset: MOCK_RENEW_OFFSET, 34 | deviceFingerprint: expect.any(Function), at Object.<anonymous> (test/unit/License.test.ts:31:26) RUNS test/integration/license.api.test.ts Test Suites: 1 failed, 1 of 2 total Tests: 1 failed, 9 passed, 10 total Snapshots: 0 total Time: 2 s, estimated 4 s ████████████████████████████████████████^C ELIFECYCLE Command failed. ELIFECYCLE Test failed. See above for more details. ``` </details> |
||
OlegIvaniv |
e5620ab1e4
|
feat(API): Implement users account quota guards (#6434)
* feat(cli): Implement users account quota guards Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Remove comment Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Address PR comments - Getting `usersQuota` from `Settings` repo - Revert `isUserManagementEnabled` helper - Fix FE listing of users Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Refactor isWithinUserQuota getter and fix tests Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Revert testDb.ts changes Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Cleanup & improve types Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Fix duplicated method * Fix failing test * Remove `isUserManagementEnabled` completely Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Check for globalRole.name to determine if user is owner Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Fix unit tests Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Set isInstanceOwnerSetUp in specs * Fix SettingsUserView UM Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * refactor: License typings suggestions for users quota guards (#6636) refactor: License typings suggestions * Update packages/cli/src/Ldap/helpers.ts Co-authored-by: Iván Ovejero <ivov.src@gmail.com> * Update packages/cli/test/integration/shared/utils.ts Co-authored-by: Iván Ovejero <ivov.src@gmail.com> * Address PR comments Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Use 403 for all user quota related errors Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> |
||
Cornelius Suermann |
a3d26eff79
|
fix: Prevent invocations of 'GET /rest/license' from returning an error when ephemeral licenses are used (#6154)
* fix: Prevent error when invoking with an ephemeral license * add tests |
||
कारतोफ्फेलस्क्रिप्ट™ |
8b19fdd5f0
|
refactor: Delete a lot of unused and duplicate code in Server and WebhookServer (#5080)
* store n8n version string in a const and use that everywhere * reduce code duplication between Server and WebhookServer * unify redis checks * fix linting |
||
कारतोफ्फेलस्क्रिप्ट™ |
0a416eebea
|
fix: Remove circular dependencies from cli tests (no-changelog) (#5000)
* fix typescript errors in cli * remove circular dependencies from cli tests |
||
Csaba Tuncsik |
0da338f9b5
|
feat(editor): Add usage and plan pages (#4819)
* feat(editor): Usage and plan page (#4793) feat(editor): usage and plan page * feat(editor): Update Usage and plan page (#4842) * feat(editor): usage and plan store * feat(editor): usage and plan page updates * feat(editor): usage and plan add buttons and alert * tes(editor): usage and plan store * tes(editor): usage remove refresh button and add link to view plans * tes(editor): usage use info tip * tes(editor): usage info style * feat(editor): Get quotas data (#4866) feat(editor): get quotas data * feat(editor): In-app experience (#4875) * feat: Add license quotas endpoint * feat: Add trigger count to workflow activation process * refactor: Get quotas from db * feat: Add license information * ✨ - finalised GET /license endpoint * 🔨 - getActiveTriggerCount return 0 instead of null * 🐛 - ignore manualTrigger when counting active triggers * ✨ - add activation endpoint * ✨ - added renew endpoint * 🔨 - added return type interfaces * 🔨 - handle license errors where methods are called * 🔨 - rename function to match name from lib * feat(editor): usage add plans buttons logic * 🚨 - testing new License methods * feat(editor): usage add more business logic * chore(editor): code formatting * 🚨 - added license api tests * fix(editor): usage store * fix(editor): usage update translations * feat(editor): usage add license activation modal * feat(editor): usage change subscription app url * feat(editor): usage add contact us link * feat(editor): usage fix modal width * ✨ - Add renewal tracking metric * ✨ - add license data to pulse event * 🔨 - set default triggercount on entity model * ✨ - add db migrations for mysql and postgres * fix(editor): Usage api call data processing and error handling * fix(editor): Usage fix activation query key * 🚨 - add initDb to telemetry tests * 🔨 - move getlicensedata to licenseservice * 🔨 - return 403 instead of 404 to non owners * 🔨 - move owner checking to middleware * 🐛 - fixed incorrectly returned error from middleware * 🐛 - using mock instead of test db for pulse tests * fix(editor): Usage fix activation and add success messages * fix(editor): Usage should not renew activation right after activation * 🚨 - skipping failing pulse tests for now * fix(editor): Usage add telemetry calls and apply design review outcomes * feat(editor): Hide usage page according to BE flag * feat(editor): Usage modify key activation flow * feat(editor): Usage change subscription app url * feat(editor): Usage add telemetry for manage plan * feat(editor): Usage extend link url query params * feat(editor): Usage add line chart if there is a workflow limit * feat(editor): Usage remove query after key activation redirection * fix(editor): Usage handle limit exceeded workflow chart, add focus to input when modal opened * fix(editor): Usage activation can return router promise when removing query * fix(editor): Usage and plan design review * 🐛 - fix renew endpoint hanging issue * 🐛 - fix license activation bug * fix(editor): Usage proper translation for plans and/or editions * fix(editor): Usage apply David's review results * fix(editor): Usage page set as default and first under Settings * fix(editor): Usage open subscription app in new tab * fix(editor): Usage page having key query param a plan links * test: Fix broken test * fix(editor): Usage page address review * 🧪 Flush promises on telemetry tests * ⚡ Extract helper with `setImmediate` * 🔥 Remove leftovers * ⚡ Use Adi's helper * refactor: Comment broken tests * refactor: add Tenant id to settings * feat: add environment to license endpoints * refactor: Move license environment to general settings * fix: fix routing bug * fix(editor): Usage page some code review changes and formatting * fix(editor): Usage page remove direct usage of reusable translation keys * fix(editor): Usage page async await instead of then * fix(editor): Usage page show some content only if network requests in component mounted were successful * chore(editor): code formatting * fix(editor): Usage checking license environment * feat(editor): Improve license activation error messages (no-changelog) (#4958) * fix(editor): Usage changing activation error title * remove unnecessary import * fix(editor): Usage refactor notification showing * fix(editor): Usage using notification directly in store actions Co-authored-by: Omar Ajoue <krynble@gmail.com> Co-authored-by: freyamade <freya@n8n.io> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: Mutasem <mutdmour@gmail.com> Co-authored-by: Cornelius Suermann <cornelius@n8n.io> * fix(editor): Usage change mounted lifecycle logic * fix(editor): Usage return after successful activation in mounted * fix: remove console log * test: fix tests related to settings (#4979) Co-authored-by: Omar Ajoue <krynble@gmail.com> Co-authored-by: freyamade <freya@n8n.io> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: Mutasem <mutdmour@gmail.com> Co-authored-by: Cornelius Suermann <cornelius@n8n.io> Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com> |
||
Mutasem Aldmour |
30e5d3d04c
|
feat(core): Add license support to n8n (#4566)
* add sdk * add license manager * type fix * add basic func * store to db * update default * activate license * add sharing flag * fix setup * clear license * update conosle log to info * refactor * use npm dependency * update error logs * add simple test * add license tests * update tests * update pnpm package * fix error handling types * Update packages/cli/src/config/schema.ts Co-authored-by: Cornelius Suermann <cornelius@n8n.io> * make feature enum * add warning * update sdk * Update packages/cli/src/config/schema.ts Co-authored-by: Cornelius Suermann <cornelius@n8n.io> Co-authored-by: Cornelius Suermann <cornelius@n8n.io> |