diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 9642c06be90..953195b606c 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -58,6 +58,19 @@
"ghost/admin/lib/koenig-editor/package.json"
],
"packageRules": [
+ // Always require dashboard approval for major updates
+ // This was largely to avoid the noise of major updates which were ESM only
+ // The idea was to check and accept major updates if they were NOT ESM
+ // But this hasn't been workable with our capacity
+ // Plus, ESM-only is an edge case in the grand scheme of dependencies
+ {
+ "description": "Require dashboard approval for major updates",
+ "matchUpdateTypes": [
+ "major"
+ ],
+ "dependencyDashboardApproval": true
+ },
+
// Group NQL packages separately from other TryGhost packages
{
"groupName": "NQL packages",
diff --git a/apps/admin-x-framework/src/api/members.ts b/apps/admin-x-framework/src/api/members.ts
index 5332bb6a8a7..5af63c4fd08 100644
--- a/apps/admin-x-framework/src/api/members.ts
+++ b/apps/admin-x-framework/src/api/members.ts
@@ -6,6 +6,11 @@ export type Member = {
email?: string;
avatar_image?: string;
can_comment?: boolean;
+ commenting?: {
+ disabled: boolean;
+ disabled_reason?: string;
+ disabled_until?: string;
+ };
};
export interface MembersResponseType {
@@ -22,12 +27,13 @@ export const useBrowseMembers = createQuery
Testing page creation with lexical
'); + assert.equal(returnedPage.mobiledoc, null); + assert.equal(returnedPage.lexical, page.lexical); + assert.equal(returnedPage.html, 'Testing page creation with lexical
'); }); it('Can\'t add a page with both mobiledoc and lexical', async function () { diff --git a/ghost/core/test/e2e-api/admin/posts-legacy.test.js b/ghost/core/test/e2e-api/admin/posts-legacy.test.js index 2e853206556..23b38523849 100644 --- a/ghost/core/test/e2e-api/admin/posts-legacy.test.js +++ b/ghost/core/test/e2e-api/admin/posts-legacy.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const nock = require('nock'); const path = require('path'); @@ -160,7 +161,7 @@ describe('Posts API', function () { .expect(200); const jsonResponse = res.body; - should.equal(jsonResponse.meta.pagination.page, 2); + assert.equal(jsonResponse.meta.pagination.page, 2); }); it('Can request a post by id', async function () { diff --git a/ghost/core/test/e2e-api/admin/tags.test.js b/ghost/core/test/e2e-api/admin/tags.test.js index 694193bcd88..4cc44433cb4 100644 --- a/ghost/core/test/e2e-api/admin/tags.test.js +++ b/ghost/core/test/e2e-api/admin/tags.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const supertest = require('supertest'); @@ -60,7 +61,7 @@ describe('Tag API', function () { .expect('Cache-Control', testUtils.cacheRules.private) .expect(200); - should.equal(res.body.meta.pagination.page, 2); + assert.equal(res.body.meta.pagination.page, 2); }); it('Can read a tag', async function () { diff --git a/ghost/core/test/e2e-api/members-comments/comments.test.js b/ghost/core/test/e2e-api/members-comments/comments.test.js index 19bd5f894df..95562bce251 100644 --- a/ghost/core/test/e2e-api/members-comments/comments.test.js +++ b/ghost/core/test/e2e-api/members-comments/comments.test.js @@ -870,10 +870,10 @@ describe('Comments API', function () { // Check last updated_at is not changed? loggedInMember = await models.Member.findOne({id: loggedInMember.id}); - should.equal(loggedInMember.get('last_seen_at').getTime(), date.getTime(), 'The member should not update `last_seen_at` if last seen at is same day'); + assert.equal(loggedInMember.get('last_seen_at').getTime(), date.getTime(), 'The member should not update `last_seen_at` if last seen at is same day'); // Check last_commented_at changed? - should.equal(loggedInMember.get('last_commented_at').getTime(), date.getTime(), 'The member should not update `last_commented_at` f last seen at is same day'); + assert.equal(loggedInMember.get('last_commented_at').getTime(), date.getTime(), 'The member should not update `last_commented_at` f last seen at is same day'); }); it('Can reply to a comment', async function () { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/send-magic-link.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/send-magic-link.test.js.snap index f9f838e6a23..a4cfac6b5d6 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/send-magic-link.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/send-magic-link.test.js.snap @@ -10,7 +10,7 @@ Object { "ghostErrorCode": null, "help": null, "id": StringMatching /\\[a-f0-9\\]\\{8\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{12\\}/, - "message": "No member exists with this e-mail address. Please sign up first.", + "message": "No member exists with this email address. Please sign up first.", "property": null, "type": "BadRequestError", }, @@ -64,7 +64,7 @@ Object { "ghostErrorCode": null, "help": null, "id": StringMatching /\\[a-f0-9\\]\\{8\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{12\\}/, - "message": "No member exists with this e-mail address.", + "message": "No member exists with this email address.", "property": null, "type": "BadRequestError", }, @@ -82,7 +82,7 @@ Object { "ghostErrorCode": null, "help": null, "id": StringMatching /\\[a-f0-9\\]\\{8\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{12\\}/, - "message": "No member exists with this e-mail address. Please sign up first.", + "message": "No member exists with this email address. Please sign up first.", "property": null, "type": "BadRequestError", }, diff --git a/ghost/core/test/e2e-api/members/send-magic-link.test.js b/ghost/core/test/e2e-api/members/send-magic-link.test.js index 0b452ba1862..176562a3f49 100644 --- a/ghost/core/test/e2e-api/members/send-magic-link.test.js +++ b/ghost/core/test/e2e-api/members/send-magic-link.test.js @@ -43,42 +43,56 @@ describe('sendMagicLink', function () { .expectStatus(400); }); - it('Throws an error when logging in to a email that does not exist', async function () { + it('Sends signup email when logging in to email that does not exist (prevents enumeration)', async function () { const email = 'this-member-does-not-exist@test.com'; await membersAgent.post('/api/send-magic-link') .body({ email, emailType: 'signin' }) - .expectStatus(400) - .matchBodySnapshot({ - errors: [{ - id: anyErrorId, - // Add this here because it is easy to be overlooked (we need a human readable error!) - // 'Please sign up first' should be included only when invite only is disabled. - message: 'No member exists with this e-mail address. Please sign up first.' - }] - }); + .expectEmptyBody() + .expectStatus(201); + + // Check that a signup email is sent instead of throwing an error + const mail = mockManager.assert.sentEmail({ + to: email, + subject: /Complete your sign up to Ghost/ + }); + + // Verify the email contains the signup link + assert.ok(mail.text.includes('complete the signup process')); + + // Verify the magic link works for signup + const [url] = mail.text.match(/https?:\/\/[^\s]+/); + const parsed = new URL(url); + const token = parsed.searchParams.get('token'); + + // Get data from token + const data = await membersService.api.getTokenDataFromMagicLinkToken(token); + assert.equal(data.email, email); + assert.equal(data.type, 'signup'); + + // Verify we can create a member from this token + const member = await membersService.api.getMemberDataFromMagicLinkToken(token); + assert.equal(member.email, email); }); - it('Throws an error when logging in to a email that does not exist (invite only)', async function () { + it('Does not send email when logging in to email that does not exist on invite-only site', async function () { settingsCache.set('members_signup_access', {value: 'invite'}); - const email = 'this-member-does-not-exist@test.com'; + const email = 'this-member-does-not-exist-invite@test.com'; await membersAgent.post('/api/send-magic-link') .body({ email, emailType: 'signin' }) - .expectStatus(400) - .matchBodySnapshot({ - errors: [{ - id: anyErrorId, - // Add this here because it is easy to be overlooked (we need a human readable error!) - // 'Please sign up first' should NOT be included - message: 'No member exists with this e-mail address.' - }] - }); + .expectEmptyBody() + .expectStatus(201); + + // No email should be sent for non-existent members on invite-only sites + assert.throws(() => { + mockManager.assert.sentEmail({to: email}); + }, /Expected at least 1 emails sent/); }); it('Throws an error when trying to sign up on an invite-only site', async function () { @@ -441,6 +455,26 @@ describe('sendMagicLink', function () { assert.match(body.otc_ref, /^[a-f0-9-]{36}$/); }); }); + + it('silently rejects signin for non-existent member with blocked domain (prevents enumeration)', async function () { + settingsCache.set('all_blocked_email_domains', {value: ['blocked-domain-setting.com']}); + + const email = 'nonexistent@blocked-domain-setting.com'; + + await membersAgent.post('/api/send-magic-link') + .body({ + email, + emailType: 'signin' + }) + .expectEmptyBody() + .expectStatus(201); + + // Verify no email was sent (prevents enumeration) + // sentEmail will throw if no email was sent + assert.throws(() => { + mockManager.assert.sentEmail({to: email}); + }, /Expected at least 1 emails sent/); + }); }); it('blocks changing email to a blocked domain', async function () { @@ -491,20 +525,27 @@ describe('sendMagicLink', function () { }) .expectStatus(201); + mockManager.mockMail(); // Reset mail mock to clear previous emails + const unicodeEmail = 'user@exаmple.com'; // Using Cyrillic 'а' + // Since member doesn't exist, this should now succeed but send signin-not-found email + // The punycode-normalized email is different from the ASCII email, so no member is found await membersAgent.post('/api/send-magic-link') .body({ email: unicodeEmail, emailType: 'signin' }) - .expectStatus(400) - .matchBodySnapshot({ - errors: [{ - id: anyErrorId, - message: 'No member exists with this e-mail address. Please sign up first.' - }] - }); + .expectEmptyBody() + .expectStatus(201); + + // Verify a signup email was sent (not a signin email, since member doesn't exist) + const mail = mockManager.assert.sentEmail({ + to: 'user@xn--exmple-4nf.com', // Punycode version of the Cyrillic domain + subject: /Complete your sign up/ + }); + + assert.ok(mail); }); it('should normalize unicode domains for signup', async function () { @@ -908,12 +949,21 @@ describe('sendMagicLink', function () { } }); - it('Should handle OTC parameter with non-existent member email', async function () { - const response = await sendMagicLinkRequest('nonexistent@test.com', 'signin', true) - .expectStatus(400); + it('Should handle OTC parameter with non-existent member email (sends signup email without OTC)', async function () { + // For non-existent members, we send a signup email + // These emails don't include OTC since the user doesn't have an account yet + const response = await sendMagicLinkRequest('nonexistent-otc@test.com', 'signin', true) + .expectStatus(201); - // Should still process the request normally for non-existent members + // Should not return otc_ref since the email sent is signup (not signin) assert(!response.body.otc_ref, 'Should not return otc_ref for non-existent member'); + + // Verify signup email was sent + const mail = mockManager.assert.sentEmail({ + to: 'nonexistent-otc@test.com', + subject: /Complete your sign up/ + }); + assert.ok(mail); }); async function sendAndVerifyOTC(email, emailType = 'signin', options = {}) { diff --git a/ghost/core/test/e2e-frontend/members.test.js b/ghost/core/test/e2e-frontend/members.test.js index f6713f1b808..8bd0bd4f422 100644 --- a/ghost/core/test/e2e-frontend/members.test.js +++ b/ghost/core/test/e2e-frontend/members.test.js @@ -282,7 +282,7 @@ describe('Front-end members behavior', function () { 'sort_order' ]); - should.equal(restoreJsonResponse.newsletters[0].name, originalNewsletterName); + assert.equal(restoreJsonResponse.newsletters[0].name, originalNewsletterName); }); }); diff --git a/ghost/core/test/integration/exporter/exporter.test.js b/ghost/core/test/integration/exporter/exporter.test.js index eb3256ac801..e2dc5d58488 100644 --- a/ghost/core/test/integration/exporter/exporter.test.js +++ b/ghost/core/test/integration/exporter/exporter.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const testUtils = require('../../utils'); @@ -132,7 +133,7 @@ describe('Exporter', function () { excludedTables.forEach((tableName) => { // NOTE: why is this undefined? The key should probably not even be present - should.equal(exportData.data[tableName], undefined); + assert.equal(exportData.data[tableName], undefined); }); // excludes settings with sensitive data diff --git a/ghost/core/test/integration/importer/v2.test.js b/ghost/core/test/integration/importer/v2.test.js index 486378ce62e..e7f5cd3bff4 100644 --- a/ghost/core/test/integration/importer/v2.test.js +++ b/ghost/core/test/integration/importer/v2.test.js @@ -787,9 +787,9 @@ describe('Importer', function () { return models.Settings.findOne(_.merge({key: 'labs'}, testUtils.context.internal)); }) .then(function (result) { - should.equal(result.attributes.key, 'labs'); - should.equal(result.attributes.group, 'labs'); - should.equal(result.attributes.value, '{"additionalPaymentMethods":true}'); + assert.equal(result.attributes.key, 'labs'); + assert.equal(result.attributes.group, 'labs'); + assert.equal(result.attributes.value, '{"additionalPaymentMethods":true}'); }); }); @@ -807,9 +807,9 @@ describe('Importer', function () { return models.Settings.findOne(_.merge({key: 'labs'}, testUtils.context.internal)); }) .then(function (result) { - should.equal(result.attributes.key, 'labs'); - should.equal(result.attributes.group, 'labs'); - should.equal(result.attributes.value, '{}'); + assert.equal(result.attributes.key, 'labs'); + assert.equal(result.attributes.group, 'labs'); + assert.equal(result.attributes.value, '{}'); }); }); diff --git a/ghost/core/test/integration/migrations/nullable-utils.test.js b/ghost/core/test/integration/migrations/nullable-utils.test.js index cbfd611e8ba..be3bc8b890c 100644 --- a/ghost/core/test/integration/migrations/nullable-utils.test.js +++ b/ghost/core/test/integration/migrations/nullable-utils.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const testUtils = require('../../utils'); @@ -124,7 +125,7 @@ describe('Migrations - schema utils', function () { // Verify initial state const isNotNullableInitial = await isColumnNotNullable(tableName, 'not_nullable_col'); - should.equal(isNotNullableInitial, true, 'Column should initially be not nullable'); + assert.equal(isNotNullableInitial, true, 'Column should initially be not nullable'); // Run up migration const transacting = await db.knex.transaction(); @@ -133,7 +134,7 @@ describe('Migrations - schema utils', function () { // Verify column is now nullable const isNullableAfter = await isColumnNullable(tableName, 'not_nullable_col'); - should.equal(isNullableAfter, true, 'Column should be nullable after up migration'); + assert.equal(isNullableAfter, true, 'Column should be nullable after up migration'); // Run down migration with foreign key checks disabled const transactingDown = await db.knex.transaction(); @@ -142,7 +143,7 @@ describe('Migrations - schema utils', function () { // Verify column is not nullable again const isNotNullableAfterDown = await isColumnNotNullable(tableName, 'not_nullable_col'); - should.equal(isNotNullableAfterDown, true, 'Column should be not nullable after down migration'); + assert.equal(isNotNullableAfterDown, true, 'Column should be not nullable after down migration'); }); it('Skips setting nullable when column is already nullable', async function () { @@ -151,7 +152,7 @@ describe('Migrations - schema utils', function () { // Verify initial state const isNullableInitial = await isColumnNullable(tableName, 'nullable_col'); - should.equal(isNullableInitial, true, 'Column should initially be nullable'); + assert.equal(isNullableInitial, true, 'Column should initially be nullable'); // Run up migration const transacting = await db.knex.transaction(); @@ -162,7 +163,7 @@ describe('Migrations - schema utils', function () { // Column should still be nullable const isNullableAfter = await isColumnNullable(tableName, 'nullable_col'); - should.equal(isNullableAfter, true, 'Column should still be nullable'); + assert.equal(isNullableAfter, true, 'Column should still be nullable'); }); it('Handles disableForeignKeyChecks option in down migration', async function () { @@ -178,7 +179,7 @@ describe('Migrations - schema utils', function () { // Verify column is nullable const isNullableAfter = await isColumnNullable(tableName, 'mixed_col'); - should.equal(isNullableAfter, true, 'Column should be nullable after up migration'); + assert.equal(isNullableAfter, true, 'Column should be nullable after up migration'); // Run down migration with foreign key checks disabled const transactingDown = await db.knex.transaction(); @@ -187,7 +188,7 @@ describe('Migrations - schema utils', function () { // Verify column is not nullable again const isNotNullableAfterDown = await isColumnNotNullable(tableName, 'mixed_col'); - should.equal(isNotNullableAfterDown, true, 'Column should be not nullable after down migration'); + assert.equal(isNotNullableAfterDown, true, 'Column should be not nullable after down migration'); // The test passes if no errors were thrown // The disableForeignKeyChecks option is being used internally @@ -200,7 +201,7 @@ describe('Migrations - schema utils', function () { // Verify initial state const isNullableInitial = await isColumnNullable(tableName, 'nullable_col'); - should.equal(isNullableInitial, true, 'Column should initially be nullable'); + assert.equal(isNullableInitial, true, 'Column should initially be nullable'); // Run up migration const transacting = await db.knex.transaction(); @@ -209,7 +210,7 @@ describe('Migrations - schema utils', function () { // Verify column is now not nullable const isNotNullableAfter = await isColumnNotNullable(tableName, 'nullable_col'); - should.equal(isNotNullableAfter, true, 'Column should be not nullable after up migration'); + assert.equal(isNotNullableAfter, true, 'Column should be not nullable after up migration'); // Run down migration const transactingDown = await db.knex.transaction(); @@ -218,7 +219,7 @@ describe('Migrations - schema utils', function () { // Verify column is nullable again const isNullableAfterDown = await isColumnNullable(tableName, 'nullable_col'); - should.equal(isNullableAfterDown, true, 'Column should be nullable after down migration'); + assert.equal(isNullableAfterDown, true, 'Column should be nullable after down migration'); }); it('Skips dropping nullable when column is already not nullable', async function () { @@ -227,7 +228,7 @@ describe('Migrations - schema utils', function () { // Verify initial state const isNotNullableInitial = await isColumnNotNullable(tableName, 'not_nullable_col'); - should.equal(isNotNullableInitial, true, 'Column should initially be not nullable'); + assert.equal(isNotNullableInitial, true, 'Column should initially be not nullable'); // Run up migration const transacting = await db.knex.transaction(); @@ -238,7 +239,7 @@ describe('Migrations - schema utils', function () { // Column should still be not nullable const isNotNullableAfter = await isColumnNotNullable(tableName, 'not_nullable_col'); - should.equal(isNotNullableAfter, true, 'Column should still be not nullable'); + assert.equal(isNotNullableAfter, true, 'Column should still be not nullable'); }); it('Handles disableForeignKeyChecks option when dropping nullable', async function () { @@ -250,7 +251,7 @@ describe('Migrations - schema utils', function () { // Verify column is initially nullable const isNullableInitial = await isColumnNullable(tableName, testColumn); - should.equal(isNullableInitial, true, 'Column should be nullable before test'); + assert.equal(isNullableInitial, true, 'Column should be nullable before test'); // Run up migration with foreign key checks disabled const transacting = await db.knex.transaction(); @@ -259,7 +260,7 @@ describe('Migrations - schema utils', function () { // Verify column is not nullable const isNotNullableAfter = await isColumnNotNullable(tableName, testColumn); - should.equal(isNotNullableAfter, true, 'Column should be not nullable after up migration'); + assert.equal(isNotNullableAfter, true, 'Column should be not nullable after up migration'); // The test passes if no errors were thrown // The disableForeignKeyChecks option is being used internally @@ -284,13 +285,13 @@ describe('Migrations - schema utils', function () { // Verify column is not nullable and still has its default const isNotNullable = await isColumnNotNullable(tableName, 'with_default'); - should.equal(isNotNullable, true, 'Column should be not nullable'); + assert.equal(isNotNullable, true, 'Column should be not nullable'); // Verify default value is preserved (MySQL-specific check) if (dbUtils.isMySQL()) { const response = await db.knex.raw('SHOW COLUMNS FROM ??', [tableName]); const columnInfo = response[0].find(col => col.Field === 'with_default'); - should.equal(columnInfo.Default, 'default', 'Column should still have its default value'); + assert.equal(columnInfo.Default, 'default', 'Column should still have its default value'); } }); diff --git a/ghost/core/test/legacy/api/admin/members-importer.test.js b/ghost/core/test/legacy/api/admin/members-importer.test.js index 74d0621decd..279c72bfae1 100644 --- a/ghost/core/test/legacy/api/admin/members-importer.test.js +++ b/ghost/core/test/legacy/api/admin/members-importer.test.js @@ -68,7 +68,7 @@ describe('Members Importer API', function () { should.exist(jsonResponse); should.exist(jsonResponse.members); - should.equal(jsonResponse.members.length, 2); + assert.equal(jsonResponse.members.length, 2); const importedMember1 = jsonResponse.members.find(m => m.email === 'member+labels_1@example.com'); should.exist(importedMember1); diff --git a/ghost/core/test/legacy/api/admin/posts.test.js b/ghost/core/test/legacy/api/admin/posts.test.js index 899f1b4c332..dc768f04340 100644 --- a/ghost/core/test/legacy/api/admin/posts.test.js +++ b/ghost/core/test/legacy/api/admin/posts.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const _ = require('lodash'); const should = require('should'); const supertest = require('supertest'); @@ -171,7 +172,7 @@ describe('Posts API', function () { localUtils.API.checkResponse(jsonResponse, 'posts'); jsonResponse.posts.should.have.length(15); - should.equal(jsonResponse.posts[0].meta_description, null); + assert.equal(jsonResponse.posts[0].meta_description, null); jsonResponse.posts[14].slug.should.equal('short-and-sweet'); jsonResponse.posts[14].meta_description.should.equal('meta description for short and sweet'); @@ -733,8 +734,8 @@ describe('Posts API', function () { should.exist(res.body.posts); should.exist(res.body.posts[0].published_at); - should.equal(res.body.posts[0].frontmatter, null); - should.equal(res.body.posts[0].plaintext, testUtils.DataGenerator.Content.posts[0].plaintext); + assert.equal(res.body.posts[0].frontmatter, null); + assert.equal(res.body.posts[0].plaintext, testUtils.DataGenerator.Content.posts[0].plaintext); }); }); @@ -954,7 +955,7 @@ describe('Posts API', function () { should.exist(res.headers['x-cache-invalidate']); should.exist(res.body.posts); - should.equal(res.body.posts[0].meta_title, 'changed meta title'); + assert.equal(res.body.posts[0].meta_title, 'changed meta title'); }); }); @@ -964,7 +965,7 @@ describe('Posts API', function () { .set('Origin', config.get('url')) .expect(200) .then((res) => { - should.equal(res.body.posts[0].email_only, false); + assert.equal(res.body.posts[0].email_only, false); return request .put(localUtils.API.getApiQuery('posts/' + testUtils.DataGenerator.Content.posts[3].id + '/')) @@ -983,8 +984,8 @@ describe('Posts API', function () { should.exist(res.headers['x-cache-invalidate']); should.exist(res.body.posts); - should.equal(res.body.posts[0].email_only, true); - should.equal(res.body.posts[0].url, 'http://127.0.0.1:2369/email/d52c42ae-2755-455c-80ec-70b2ec55c903/'); + assert.equal(res.body.posts[0].email_only, true); + assert.equal(res.body.posts[0].url, 'http://127.0.0.1:2369/email/d52c42ae-2755-455c-80ec-70b2ec55c903/'); }); }); @@ -1005,8 +1006,8 @@ describe('Posts API', function () { should.exist(res.body.posts); should.exist(res.body.posts[0].title); res.body.posts[0].title.should.equal('Has a title by no other content'); - should.equal(res.body.posts[0].html, undefined); - should.equal(res.body.posts[0].plaintext, undefined); + assert.equal(res.body.posts[0].html, undefined); + assert.equal(res.body.posts[0].plaintext, undefined); return request .put(localUtils.API.getApiQuery(`posts/${res.body.posts[0].id}/`)) @@ -1027,8 +1028,8 @@ describe('Posts API', function () { should.exist(res.body.posts); res.body.posts[0].title.should.equal('Has a title by no other content'); - should.equal(res.body.posts[0].html, undefined); - should.equal(res.body.posts[0].plaintext, undefined); + assert.equal(res.body.posts[0].html, undefined); + assert.equal(res.body.posts[0].plaintext, undefined); }); }); diff --git a/ghost/core/test/legacy/api/admin/settings.test.js b/ghost/core/test/legacy/api/admin/settings.test.js index 3b89e8ef856..44657d28c0a 100644 --- a/ghost/core/test/legacy/api/admin/settings.test.js +++ b/ghost/core/test/legacy/api/admin/settings.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const supertest = require('supertest'); const config = require('../../../../core/shared/config'); @@ -31,7 +32,7 @@ describe('Settings API', function () { // Check if not changed (also check internal ones) const afterValue = settingsCache.get(key); - should.deepEqual(afterValue, expectedValue); + assert.deepEqual(afterValue, expectedValue); } async function checkCantEdit(key, value) { @@ -58,7 +59,7 @@ describe('Settings API', function () { // Check if not changed (also check internal ones) const afterValue = settingsCache.get(key); - should.deepEqual(afterValue, currentValue); + assert.deepEqual(afterValue, currentValue); } describe('As Owner', function () { @@ -127,10 +128,10 @@ describe('Settings API', function () { should.exist(putBody); let setting = putBody.settings.find(s => s.key === 'unsplash'); - should.equal(setting.value, true); + assert.equal(setting.value, true); setting = putBody.settings.find(s => s.key === 'title'); - should.equal(setting.value, 'New Value'); + assert.equal(setting.value, 'New Value'); localUtils.API.checkResponse(putBody, 'settings'); }); diff --git a/ghost/core/test/legacy/api/admin/users.test.js b/ghost/core/test/legacy/api/admin/users.test.js index 4d7f11251aa..1ac52443612 100644 --- a/ghost/core/test/legacy/api/admin/users.test.js +++ b/ghost/core/test/legacy/api/admin/users.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const supertest = require('supertest'); const ObjectId = require('bson-objectid').default; @@ -145,10 +146,10 @@ describe('User API', function () { .expect(200); const tags = await otherAuthorPost.related('tags').fetch(); - should.equal(tags.length, 3); + assert.equal(tags.length, 3); // user deletion results in a second tag being added with sort_order of 0, putting it at index 1 instead of at the end (index 2) - should.equal(tags.models[1].get('slug'), `hash-${otherAuthor.slug}`); - should.equal(tags.models[1].get('name'), `#${otherAuthor.slug}`); + assert.equal(tags.models[1].get('slug'), `hash-${otherAuthor.slug}`); + assert.equal(tags.models[1].get('name'), `#${otherAuthor.slug}`); }); }); }); diff --git a/ghost/core/test/legacy/models/model-member-stripe-customer.test.js b/ghost/core/test/legacy/models/model-member-stripe-customer.test.js index b05783e800f..dd31e55cfd0 100644 --- a/ghost/core/test/legacy/models/model-member-stripe-customer.test.js +++ b/ghost/core/test/legacy/models/model-member-stripe-customer.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const {Member} = require('../../../core/server/models/member'); const {MemberStripeCustomer} = require('../../../core/server/models/member-stripe-customer'); @@ -74,9 +75,9 @@ describe('MemberStripeCustomer Model', function run() { const subscriptions = customer.related('subscriptions'); - should.equal(subscriptions.length, 1, 'Should be two subscriptions'); + assert.equal(subscriptions.length, 1, 'Should have one subscription'); - should.equal(subscriptions.models[0].get('subscription_id'), 'fake_subscription_id'); + assert.equal(subscriptions.models[0].get('subscription_id'), 'fake_subscription_id'); }); }); @@ -103,8 +104,8 @@ describe('MemberStripeCustomer Model', function run() { should.exist(memberFromRelation, 'MemberStripeCustomer should have been fetched with member'); - should.equal(memberFromRelation.get('id'), member.get('id')); - should.equal(memberFromRelation.get('email'), 'test@test.member'); + assert.equal(memberFromRelation.get('id'), member.get('id')); + assert.equal(memberFromRelation.get('email'), 'test@test.member'); }); }); diff --git a/ghost/core/test/legacy/models/model-members.test.js b/ghost/core/test/legacy/models/model-members.test.js index 15a6c38e3af..3d0e856efed 100644 --- a/ghost/core/test/legacy/models/model-members.test.js +++ b/ghost/core/test/legacy/models/model-members.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const BaseModel = require('../../../core/server/models/base'); const {Label} = require('../../../core/server/models/label'); @@ -146,10 +147,10 @@ describe('Member Model', function run() { const stripeCustomers = member.related('stripeCustomers'); - should.equal(stripeCustomers.length, 2, 'Should be two stripeCustomers'); + assert.equal(stripeCustomers.length, 2, 'Should be two stripeCustomers'); - should.equal(stripeCustomers.models[0].get('customer_id'), 'fake_customer_id1'); - should.equal(stripeCustomers.models[1].get('customer_id'), 'fake_customer_id2'); + assert.equal(stripeCustomers.models[0].get('customer_id'), 'fake_customer_id1'); + assert.equal(stripeCustomers.models[1].get('customer_id'), 'fake_customer_id2'); }); }); @@ -481,7 +482,7 @@ describe('Member Model', function run() { { const members = await Member.findPage({filter: `subscriptions.status:canceled+subscriptions.status:-active`}); - should.equal(members.data.length, 0, 'Can search for members with canceled subscription and no active ones'); + assert.equal(members.data.length, 0, 'Can search for members with canceled subscription and no active ones'); } await StripeCustomerSubscription.edit({ @@ -493,12 +494,12 @@ describe('Member Model', function run() { { const members = await Member.findPage({filter: `subscriptions.status:canceled+subscriptions.status:-active`}); - should.equal(members.data.length, 1, 'Can search for members with canceled subscription and no active ones'); + assert.equal(members.data.length, 1, 'Can search for members with canceled subscription and no active ones'); } { const members = await Member.findPage({filter: `subscriptions.plan_interval:year`}); - should.equal(members.data.length, 1, 'Can search for members by plan_interval'); + assert.equal(members.data.length, 1, 'Can search for members by plan_interval'); } await StripeCustomerSubscription.edit({ @@ -510,7 +511,7 @@ describe('Member Model', function run() { { const members = await Member.findPage({filter: `subscriptions.plan_interval:month+subscriptions.plan_interval:-year`}); - should.equal(members.data.length, 0, 'Can search for members by plan_interval'); + assert.equal(members.data.length, 0, 'Can search for members by plan_interval'); } }); @@ -582,7 +583,7 @@ describe('Member Model', function run() { const members = await Member.findPage({filter: `offer_redemptions:${offerId}`}); // convert members to json const membersJson = members.data.map(model => model.toJSON()); - should.equal(membersJson[0].email, email, 'Can search for members with offer_redemptions'); + assert.equal(membersJson[0].email, email, 'Can search for members with offer_redemptions'); }); }); }); diff --git a/ghost/core/test/legacy/models/model-posts.test.js b/ghost/core/test/legacy/models/model-posts.test.js index 63176b69b79..ab867072f23 100644 --- a/ghost/core/test/legacy/models/model-posts.test.js +++ b/ghost/core/test/legacy/models/model-posts.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const errors = require('@tryghost/errors'); const should = require('should'); const sinon = require('sinon'); @@ -747,8 +748,8 @@ describe('Post Model', function () { (!!createdPost.get('featured')).should.equal(false); (!!createdPost.get('page')).should.equal(false); - should.equal(createdPost.get('locale'), null); - should.equal(createdPost.get('visibility'), 'public'); + assert.equal(createdPost.get('locale'), null); + assert.equal(createdPost.get('visibility'), 'public'); // testing for nulls (createdPost.get('feature_image') === null).should.equal(true); @@ -756,8 +757,8 @@ describe('Post Model', function () { createdPost.get('created_at').should.be.above(new Date(0).getTime()); createdPost.relations.authors.models[0].id.should.equal(testUtils.DataGenerator.Content.users[0].id); createdPost.get('updated_at').should.be.above(new Date(0).getTime()); - should.equal(createdPost.get('published_at'), null); - should.equal(createdPost.get('published_by'), null); + assert.equal(createdPost.get('published_at'), null); + assert.equal(createdPost.get('published_by'), null); createdPostUpdatedDate = createdPost.get('updated_at'); @@ -816,8 +817,8 @@ describe('Post Model', function () { (!!createdPost.get('featured')).should.equal(false); (!!createdPost.get('page')).should.equal(false); - should.equal(createdPost.get('locale'), null); - should.equal(createdPost.get('visibility'), 'paid'); + assert.equal(createdPost.get('locale'), null); + assert.equal(createdPost.get('visibility'), 'paid'); // testing for nulls (createdPost.get('feature_image') === null).should.equal(true); @@ -825,8 +826,8 @@ describe('Post Model', function () { createdPost.get('created_at').should.be.above(new Date(0).getTime()); createdPost.relations.authors.models[0].id.should.equal(testUtils.DataGenerator.Content.users[0].id); createdPost.get('updated_at').should.be.above(new Date(0).getTime()); - should.equal(createdPost.get('published_at'), null); - should.equal(createdPost.get('published_by'), null); + assert.equal(createdPost.get('published_at'), null); + assert.equal(createdPost.get('published_by'), null); createdPostUpdatedDate = createdPost.get('updated_at'); @@ -1484,7 +1485,7 @@ describe('Post Model', function () { }).then(function (response) { const deleted = response.toJSON(); - should.equal(deleted.author, undefined); + assert.equal(deleted.author, undefined); Object.keys(eventsTriggered).length.should.eql(5); should.exist(eventsTriggered['post.unpublished']); @@ -1496,7 +1497,7 @@ describe('Post Model', function () { // Double check we can't find the post again return models.Post.findOne(firstItemData); }).then(function (newResults) { - should.equal(newResults, null); + assert.equal(newResults, null); // Double check we can't find any related tags return ghostBookshelf.knex.select().table('posts_tags').where('post_id', firstItemData.id); @@ -1525,7 +1526,7 @@ describe('Post Model', function () { }).then(function (response) { const deleted = response.toJSON(); - should.equal(deleted.author, undefined); + assert.equal(deleted.author, undefined); Object.keys(eventsTriggered).length.should.eql(4); should.exist(eventsTriggered['post.deleted']); @@ -1536,7 +1537,7 @@ describe('Post Model', function () { // Double check we can't find the post again return models.Post.findOne(firstItemData); }).then(function (newResults) { - should.equal(newResults, null); + assert.equal(newResults, null); // Double check we can't find any related tags return ghostBookshelf.knex.select().table('posts_tags').where('post_id', firstItemData.id); @@ -1565,7 +1566,7 @@ describe('Post Model', function () { }).then(function (response) { const deleted = response.toJSON(); - should.equal(deleted.author, undefined); + assert.equal(deleted.author, undefined); Object.keys(eventsTriggered).length.should.eql(3); should.exist(eventsTriggered['page.unpublished']); @@ -1575,7 +1576,7 @@ describe('Post Model', function () { // Double check we can't find the post again return models.Post.findOne(firstItemData); }).then(function (newResults) { - should.equal(newResults, null); + assert.equal(newResults, null); // Double check we can't find any related tags return ghostBookshelf.knex.select().table('posts_tags').where('post_id', firstItemData.id); @@ -1602,7 +1603,7 @@ describe('Post Model', function () { }).then(function (response) { const deleted = response.toJSON(); - should.equal(deleted.author, undefined); + assert.equal(deleted.author, undefined); Object.keys(eventsTriggered).length.should.eql(2); should.exist(eventsTriggered['page.deleted']); @@ -1611,7 +1612,7 @@ describe('Post Model', function () { // Double check we can't find the post again return models.Post.findOne(firstItemData); }).then(function (newResults) { - should.equal(newResults, null); + assert.equal(newResults, null); // Double check we can't find any related tags return ghostBookshelf.knex.select().table('posts_tags').where('post_id', firstItemData.id); @@ -1738,7 +1739,7 @@ describe('Post Model', function () { }); }) .then((mobiledocRevisions) => { - should.equal(mobiledocRevisions.length, 2); + assert.equal(mobiledocRevisions.length, 2); mobiledocRevisions.toJSON()[0].mobiledoc.should.equal(markdownToMobiledoc('b')); mobiledocRevisions.toJSON()[1].mobiledoc.should.equal(markdownToMobiledoc('a')); @@ -1773,7 +1774,7 @@ describe('Post Model', function () { }) ) .then((mobiledocRevisions) => { - should.equal(mobiledocRevisions.length, 10); + assert.equal(mobiledocRevisions.length, 10); mobiledocRevisions.toJSON()[0].mobiledoc.should.equal(markdownToMobiledoc('revision: 11')); mobiledocRevisions.toJSON()[9].mobiledoc.should.equal(markdownToMobiledoc('revision: 2')); @@ -1803,7 +1804,7 @@ describe('Post Model', function () { }); }) .then((mobiledocRevisions) => { - should.equal(mobiledocRevisions.length, 0); + assert.equal(mobiledocRevisions.length, 0); return models.Post.edit({ mobiledoc: markdownToMobiledoc('b') @@ -1819,7 +1820,7 @@ describe('Post Model', function () { }); }) .then((mobiledocRevisions) => { - should.equal(mobiledocRevisions.length, 2); + assert.equal(mobiledocRevisions.length, 2); mobiledocRevisions.toJSON()[0].mobiledoc.should.equal(markdownToMobiledoc('b')); mobiledocRevisions.toJSON()[1].mobiledoc.should.equal(markdownToMobiledoc('a')); diff --git a/ghost/core/test/legacy/models/model-stripe-customer-subscription.test.js b/ghost/core/test/legacy/models/model-stripe-customer-subscription.test.js index 63a15f47f56..c01968185d8 100644 --- a/ghost/core/test/legacy/models/model-stripe-customer-subscription.test.js +++ b/ghost/core/test/legacy/models/model-stripe-customer-subscription.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const {Member} = require('../../../core/server/models/member'); const {MemberStripeCustomer} = require('../../../core/server/models/member-stripe-customer'); @@ -72,7 +73,7 @@ describe('StripeCustomerSubscription Model', function run() { should.exist(customer, 'StripeCustomerSubscription should have been fetched with customer'); - should.equal(customer.get('customer_id'), 'fake_customer_id'); + assert.equal(customer.get('customer_id'), 'fake_customer_id'); }); }); }); diff --git a/ghost/core/test/legacy/models/model-users.test.js b/ghost/core/test/legacy/models/model-users.test.js index 1cb5880938a..a9ab4633846 100644 --- a/ghost/core/test/legacy/models/model-users.test.js +++ b/ghost/core/test/legacy/models/model-users.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const errors = require('@tryghost/errors'); const should = require('should'); const sinon = require('sinon'); @@ -279,7 +280,7 @@ describe('User Model', function run() { should.exist(results); user = results.toJSON(); user.id.should.equal(firstUser); - should.equal(user.website, null); + assert.equal(user.website, null); return UserModel.edit({website: 'http://some.newurl.com'}, {id: firstUser}); }).then(function (edited) { diff --git a/ghost/core/test/unit/api/canary/session.test.js b/ghost/core/test/unit/api/canary/session.test.js index 406c27bdd3a..c8ac37073a6 100644 --- a/ghost/core/test/unit/api/canary/session.test.js +++ b/ghost/core/test/unit/api/canary/session.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const {UnauthorizedError} = require('@tryghost/errors'); @@ -17,10 +18,10 @@ describe('Session controller', function () { }); it('exports an add method', function () { - should.equal(typeof sessionController.add, 'function'); + assert.equal(typeof sessionController.add, 'function'); }); it('exports an delete method', function () { - should.equal(typeof sessionController.delete, 'function'); + assert.equal(typeof sessionController.delete, 'function'); }); describe('#add', function () { @@ -28,7 +29,7 @@ describe('Session controller', function () { return sessionController.add({}).then(() => { should.fail('session.add did not throw'); },(err) => { - should.equal(err instanceof UnauthorizedError, true); + assert.equal(err instanceof UnauthorizedError, true); }); }); @@ -42,7 +43,7 @@ describe('Session controller', function () { }, {}).then(() => { should.fail('session.add did not throw'); },(err) => { - should.equal(err instanceof UnauthorizedError, true); + assert.equal(err instanceof UnauthorizedError, true); }); }); @@ -68,13 +69,13 @@ describe('Session controller', function () { }}).then((fn) => { fn(fakeReq, fakeRes, fakeNext); }).then(function () { - should.equal(fakeReq.brute.reset.callCount, 1); + assert.equal(fakeReq.brute.reset.callCount, 1); const createSessionStubCall = createSessionStub.getCall(0); - should.equal(fakeReq.user, fakeUser); - should.equal(createSessionStubCall.args[0], fakeReq); - should.equal(createSessionStubCall.args[1], fakeRes); - should.equal(createSessionStubCall.args[2], fakeNext); + assert.equal(fakeReq.user, fakeUser); + assert.equal(createSessionStubCall.args[0], fakeReq); + assert.equal(createSessionStubCall.args[1], fakeRes); + assert.equal(createSessionStubCall.args[2], fakeNext); }); }); @@ -101,9 +102,9 @@ describe('Session controller', function () { }}).then((fn) => { fn(fakeReq, fakeRes, fakeNext); }).then(function () { - should.equal(fakeReq.brute.reset.callCount, 1); - should.equal(fakeNext.callCount, 1); - should.equal(fakeNext.args[0][0], resetError); + assert.equal(fakeReq.brute.reset.callCount, 1); + assert.equal(fakeNext.callCount, 1); + assert.equal(fakeNext.args[0][0], resetError); }); }); @@ -129,15 +130,15 @@ describe('Session controller', function () { }}).then((fn) => { fn(fakeReq, fakeRes, fakeNext); }).then(function () { - should.equal(fakeReq.brute.reset.callCount, 1); + assert.equal(fakeReq.brute.reset.callCount, 1); const createSessionStubCall = createSessionStub.getCall(0); - should.equal(fakeReq.user, fakeUser); - should.equal(createSessionStubCall.args[0], fakeReq); - should.equal(createSessionStubCall.args[1], fakeRes); - should.equal(createSessionStubCall.args[2], fakeNext); + assert.equal(fakeReq.user, fakeUser); + assert.equal(createSessionStubCall.args[0], fakeReq); + assert.equal(createSessionStubCall.args[1], fakeRes); + assert.equal(createSessionStubCall.args[2], fakeNext); - should.equal(fakeReq.skipVerification, true); + assert.equal(fakeReq.skipVerification, true); }); }); @@ -163,15 +164,15 @@ describe('Session controller', function () { }}).then((fn) => { fn(fakeReq, fakeRes, fakeNext); }).then(function () { - should.equal(fakeReq.brute.reset.callCount, 1); + assert.equal(fakeReq.brute.reset.callCount, 1); const createSessionStubCall = createSessionStub.getCall(0); - should.equal(fakeReq.user, fakeUser); - should.equal(createSessionStubCall.args[0], fakeReq); - should.equal(createSessionStubCall.args[1], fakeRes); - should.equal(createSessionStubCall.args[2], fakeNext); + assert.equal(fakeReq.user, fakeUser); + assert.equal(createSessionStubCall.args[0], fakeReq); + assert.equal(createSessionStubCall.args[1], fakeRes); + assert.equal(createSessionStubCall.args[2], fakeNext); - should.equal(fakeReq.skipVerification, false); + assert.equal(fakeReq.skipVerification, false); }); }); }); @@ -187,9 +188,9 @@ describe('Session controller', function () { fn(fakeReq, fakeRes, fakeNext); }).then(function () { const destroySessionStubCall = logoutSessionStub.getCall(0); - should.equal(destroySessionStubCall.args[0], fakeReq); - should.equal(destroySessionStubCall.args[1], fakeRes); - should.equal(destroySessionStubCall.args[2], fakeNext); + assert.equal(destroySessionStubCall.args[0], fakeReq); + assert.equal(destroySessionStubCall.args[1], fakeRes); + assert.equal(destroySessionStubCall.args[2], fakeNext); }); }); }); diff --git a/ghost/core/test/unit/frontend/helpers/facebook-url.test.js b/ghost/core/test/unit/frontend/helpers/facebook-url.test.js index 0674cab55c9..5a902b99210 100644 --- a/ghost/core/test/unit/frontend/helpers/facebook-url.test.js +++ b/ghost/core/test/unit/frontend/helpers/facebook-url.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); // Stuff we are testing @@ -30,6 +31,6 @@ describe('{{facebook_url}} helper', function () { }); it('should return null if there are no facebook usernames', function () { - should.equal(facebook_url(options), null); + assert.equal(facebook_url(options), null); }); }); diff --git a/ghost/core/test/unit/frontend/helpers/total-members.test.js b/ghost/core/test/unit/frontend/helpers/total-members.test.js index 503cf3d1687..145ded3929b 100644 --- a/ghost/core/test/unit/frontend/helpers/total-members.test.js +++ b/ghost/core/test/unit/frontend/helpers/total-members.test.js @@ -1,10 +1,10 @@ -const should = require('should'); +const assert = require('node:assert/strict'); const total_members = require('../../../../core/frontend/helpers/total_members'); describe('{{total_members}} helper', function () { it('can render total members', async function () { const rendered = await total_members.call({total: 50000}); - should.equal(rendered.string, '50,000+'); + assert.equal(rendered.string, '50,000+'); }); }); diff --git a/ghost/core/test/unit/frontend/helpers/total-paid-members.test.js b/ghost/core/test/unit/frontend/helpers/total-paid-members.test.js index ba882a5f4cf..4d195ddf9eb 100644 --- a/ghost/core/test/unit/frontend/helpers/total-paid-members.test.js +++ b/ghost/core/test/unit/frontend/helpers/total-paid-members.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const total_paid_members = require('../../../../core/frontend/helpers/total_paid_members'); @@ -5,6 +6,6 @@ const total_paid_members = require('../../../../core/frontend/helpers/total_paid describe('{{total_paid_members}} helper', function () { it('can render total paid members', async function () { const rendered = await total_paid_members.call({paid: 3000}); - should.equal(rendered.string, '3,000+'); + assert.equal(rendered.string, '3,000+'); }); }); diff --git a/ghost/core/test/unit/frontend/helpers/twitter-url.test.js b/ghost/core/test/unit/frontend/helpers/twitter-url.test.js index 898a8ca517c..e82243468a3 100644 --- a/ghost/core/test/unit/frontend/helpers/twitter-url.test.js +++ b/ghost/core/test/unit/frontend/helpers/twitter-url.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); // Stuff we are testing @@ -30,6 +31,6 @@ describe('{{twitter_url}} helper', function () { }); it('should return null if there are no twitter usernames', function () { - should.equal(twitter_url(options), null); + assert.equal(twitter_url(options), null); }); }); diff --git a/ghost/core/test/unit/frontend/meta/keywords.test.js b/ghost/core/test/unit/frontend/meta/keywords.test.js index ef0356e5159..f0be172ee54 100644 --- a/ghost/core/test/unit/frontend/meta/keywords.test.js +++ b/ghost/core/test/unit/frontend/meta/keywords.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const models = require('../../../../core/server/models'); @@ -22,7 +23,7 @@ describe('getKeywords', function () { ] } }); - should.deepEqual(keywords, ['one', 'two', 'three']); + assert.deepEqual(keywords, ['one', 'two', 'three']); }); it('should only return visible tags', function () { @@ -36,7 +37,7 @@ describe('getKeywords', function () { ] } }); - should.deepEqual(keywords, ['one', 'three']); + assert.deepEqual(keywords, ['one', 'three']); }); it('should return null if post has tags is empty array', function () { @@ -45,20 +46,20 @@ describe('getKeywords', function () { tags: [] } }); - should.equal(keywords, null); + assert.equal(keywords, null); }); it('should return null if post has no tags', function () { const keywords = getKeywords({ post: {} }); - should.equal(keywords, null); + assert.equal(keywords, null); }); it('should return null if not a post', function () { const keywords = getKeywords({ author: {} }); - should.equal(keywords, null); + assert.equal(keywords, null); }); }); diff --git a/ghost/core/test/unit/frontend/meta/modified-date.test.js b/ghost/core/test/unit/frontend/meta/modified-date.test.js index 562636c55ff..4c94df947c6 100644 --- a/ghost/core/test/unit/frontend/meta/modified-date.test.js +++ b/ghost/core/test/unit/frontend/meta/modified-date.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const getModifiedDate = require('../../../../core/frontend/meta/modified-date'); @@ -9,7 +10,7 @@ describe('getModifiedDate', function () { updated_at: new Date('2016-01-01 12:56:45.232Z') } }); - should.equal(modDate, '2016-01-01T12:56:45.232Z'); + assert.equal(modDate, '2016-01-01T12:56:45.232Z'); }); it('should return null if no update_at date on context', function () { @@ -17,7 +18,7 @@ describe('getModifiedDate', function () { context: ['author'], author: {} }); - should.equal(modDate, null); + assert.equal(modDate, null); }); it('should return null if context and property do not match in name', function () { @@ -27,6 +28,6 @@ describe('getModifiedDate', function () { updated_at: new Date('2016-01-01 12:56:45.232Z') } }); - should.equal(modDate, null); + assert.equal(modDate, null); }); }); diff --git a/ghost/core/test/unit/frontend/meta/og-type.test.js b/ghost/core/test/unit/frontend/meta/og-type.test.js index bbcebe47aea..510826d584d 100644 --- a/ghost/core/test/unit/frontend/meta/og-type.test.js +++ b/ghost/core/test/unit/frontend/meta/og-type.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const getOgType = require('../../../../core/frontend/meta/og-type'); @@ -6,20 +7,20 @@ describe('getOgType', function () { const ogType = getOgType({ context: ['author'] }); - should.equal(ogType, 'profile'); + assert.equal(ogType, 'profile'); }); it('should return og type article if context is type post', function () { const ogType = getOgType({ context: ['post'] }); - should.equal(ogType, 'article'); + assert.equal(ogType, 'article'); }); it('should return og type website if context is not author or post', function () { const ogType = getOgType({ context: ['tag'] }); - should.equal(ogType, 'website'); + assert.equal(ogType, 'website'); }); }); diff --git a/ghost/core/test/unit/frontend/meta/published-date.test.js b/ghost/core/test/unit/frontend/meta/published-date.test.js index 1951db653cc..bfa816499be 100644 --- a/ghost/core/test/unit/frontend/meta/published-date.test.js +++ b/ghost/core/test/unit/frontend/meta/published-date.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const getPublishedDate = require('../../../../core/frontend/meta/published-date'); @@ -9,7 +10,7 @@ describe('getPublishedDate', function () { published_at: new Date('2016-01-01 12:56:45.232Z') } }); - should.equal(pubDate, '2016-01-01T12:56:45.232Z'); + assert.equal(pubDate, '2016-01-01T12:56:45.232Z'); }); it('should return published at over created at date as ISO 8601 if has both', function () { @@ -20,7 +21,7 @@ describe('getPublishedDate', function () { created_at: new Date('2015-01-01 12:56:45.232Z') } }); - should.equal(pubDate, '2016-01-01T12:56:45.232Z'); + assert.equal(pubDate, '2016-01-01T12:56:45.232Z'); }); it('should return null if no update_at date on context', function () { @@ -28,7 +29,7 @@ describe('getPublishedDate', function () { context: ['author'], author: {} }); - should.equal(pubDate, null); + assert.equal(pubDate, null); }); it('should return null if context and property do not match in name', function () { @@ -38,6 +39,6 @@ describe('getPublishedDate', function () { published_at: new Date('2016-01-01 12:56:45.232Z') } }); - should.equal(pubDate, null); + assert.equal(pubDate, null); }); }); diff --git a/ghost/core/test/unit/frontend/meta/rss-url.test.js b/ghost/core/test/unit/frontend/meta/rss-url.test.js index 2d7ed8a5071..87a441bd229 100644 --- a/ghost/core/test/unit/frontend/meta/rss-url.test.js +++ b/ghost/core/test/unit/frontend/meta/rss-url.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const routing = require('../../../../core/frontend/services/routing'); @@ -17,7 +18,7 @@ describe('getRssUrl', function () { secure: false }); - should.equal(rssUrl, '/rss/'); + assert.equal(rssUrl, '/rss/'); }); it('forwards absolute flags', function () { diff --git a/ghost/core/test/unit/frontend/meta/schema.test.js b/ghost/core/test/unit/frontend/meta/schema.test.js index 8706f91f94e..399f6c62cab 100644 --- a/ghost/core/test/unit/frontend/meta/schema.test.js +++ b/ghost/core/test/unit/frontend/meta/schema.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const {getSchema, SOCIAL_PLATFORMS} = require('../../../../core/frontend/meta/schema'); const socialUrls = require('@tryghost/social-urls'); @@ -93,7 +94,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'Article', author: { @@ -194,7 +195,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'Article', author: { @@ -275,7 +276,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'Article', author: { @@ -343,7 +344,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'Article', author: { @@ -407,7 +408,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'WebSite', description: 'This is the theme description', @@ -454,7 +455,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'Series', description: 'This is the tag description!', @@ -504,7 +505,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'Person', description: 'This is the author description!', @@ -559,7 +560,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'Person', description: 'This is the author description!', @@ -607,7 +608,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); - should.deepEqual(schema, { + assert.deepEqual(schema, { '@context': 'https://schema.org', '@type': 'Person', description: 'This is the author description!', @@ -646,7 +647,7 @@ describe('getSchema', function () { const expectedSameAs = buildExpectedSameAs('http://myblogsite.com/', USERNAMES); const schema = getSchema(metadata, data); - should.deepEqual(schema.author.sameAs, expectedSameAs); + assert.deepEqual(schema.author.sameAs, expectedSameAs); }); it('should include all supported social links in sameAs for author context', function () { @@ -671,7 +672,7 @@ describe('getSchema', function () { const expectedSameAs = buildExpectedSameAs('http://myblogsite.com/', USERNAMES); const schema = getSchema(metadata, data); - should.deepEqual(schema.sameAs, expectedSameAs); + assert.deepEqual(schema.sameAs, expectedSameAs); }); it('should escape special characters in social platform urls', function () { @@ -696,7 +697,7 @@ describe('getSchema', function () { const expectedSameAs = buildExpectedSameAs('http://myblogsite.com/', {facebook: 'user=name='}); const schema = getSchema(metadata, data); - should.deepEqual(schema.sameAs, expectedSameAs); + assert.deepEqual(schema.sameAs, expectedSameAs); }); it('should return null if not a supported type', function () { @@ -704,7 +705,7 @@ describe('getSchema', function () { const data = {}; const schema = getSchema(metadata, data); - should.deepEqual(schema, null); + assert.deepEqual(schema, null); }); // Contributors tests @@ -771,7 +772,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); should.exist(schema.contributor); - should.deepEqual(schema.contributor, [ + assert.deepEqual(schema.contributor, [ { '@type': 'Person', name: 'Co-Author', @@ -826,8 +827,8 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); should.exist(schema.contributor); - should.equal(schema.contributor.length, 2); - should.deepEqual(schema.contributor[0], { + assert.equal(schema.contributor.length, 2); + assert.deepEqual(schema.contributor[0], { '@type': 'Person', name: 'Co-Author 1', url: 'http://mysite.com/author/co-author-1/', @@ -836,7 +837,7 @@ describe('getSchema', function () { 'https://x.com/coauthor1' ] }); - should.deepEqual(schema.contributor[1], { + assert.deepEqual(schema.contributor[1], { '@type': 'Person', name: 'Co-Author 2', url: 'http://mysite.com/author/co-author-2/', @@ -876,7 +877,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); should.exist(schema.contributor); - should.deepEqual(schema.contributor[0].sameAs, expectedSameAs); + assert.deepEqual(schema.contributor[0].sameAs, expectedSameAs); }); it('should handle contributors with missing or null data', function () { @@ -911,7 +912,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); should.exist(schema.contributor); - should.deepEqual(schema.contributor[0], { + assert.deepEqual(schema.contributor[0], { '@type': 'Person', name: 'Co-Author', url: 'http://mysite.com/author/co-author/', @@ -952,7 +953,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); should.exist(schema.contributor); - should.deepEqual(schema.contributor[0], { + assert.deepEqual(schema.contributor[0], { '@type': 'Person', name: 'Co-Author', url: 'http://mysite.com/author/co-author/', @@ -990,7 +991,7 @@ describe('getSchema', function () { const schema = getSchema(metadata, data); should.exist(schema.contributor); - should.deepEqual(schema.contributor[0].sameAs, [ + assert.deepEqual(schema.contributor[0].sameAs, [ 'http://coauthorsite.com/?user=name¶m=<script>alert("test")</script>', 'https://www.facebook.com/user=name=' ]); diff --git a/ghost/core/test/unit/frontend/meta/structured-data.test.js b/ghost/core/test/unit/frontend/meta/structured-data.test.js index e66741b86e1..4af5b523495 100644 --- a/ghost/core/test/unit/frontend/meta/structured-data.test.js +++ b/ghost/core/test/unit/frontend/meta/structured-data.test.js @@ -1,4 +1,4 @@ -const should = require('should'); +const assert = require('node:assert/strict'); const getStructuredData = require('../../../../core/frontend/meta/structured-data'); describe('getStructuredData', function () { @@ -38,7 +38,7 @@ describe('getStructuredData', function () { const structuredData = getStructuredData(metadata); - should.deepEqual(structuredData, { + assert.deepEqual(structuredData, { 'article:modified_time': '2016-01-21T22:13:05.412Z', 'article:published_time': '2015-12-25T05:35:01.234Z', 'article:tag': ['one', 'two', 'tag'], @@ -100,7 +100,7 @@ describe('getStructuredData', function () { const structuredData = getStructuredData(metadata); - should.deepEqual(structuredData, { + assert.deepEqual(structuredData, { 'article:modified_time': '2016-01-21T22:13:05.412Z', 'article:published_time': '2015-12-25T05:35:01.234Z', 'article:tag': ['one', 'two', 'tag'], @@ -160,7 +160,7 @@ describe('getStructuredData', function () { const structuredData = getStructuredData(metadata); - should.deepEqual(structuredData, { + assert.deepEqual(structuredData, { 'article:modified_time': '2016-01-21T22:13:05.412Z', 'og:site_name': 'Site Title', 'og:title': 'Post Title', diff --git a/ghost/core/test/unit/frontend/services/theme-engine/middleware.test.js b/ghost/core/test/unit/frontend/services/theme-engine/middleware.test.js index 391b0dbff15..3c1a1f56c34 100644 --- a/ghost/core/test/unit/frontend/services/theme-engine/middleware.test.js +++ b/ghost/core/test/unit/frontend/services/theme-engine/middleware.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const hbs = require('../../../../../core/frontend/services/theme-engine/engine'); @@ -163,9 +164,9 @@ describe('Themes middleware', function () { data.config.posts_per_page.should.eql(2); // Check labs config - should.deepEqual(data.labs, fakeLabsData); + assert.deepEqual(data.labs, fakeLabsData); - should.deepEqual(data.site, { + assert.deepEqual(data.site, { ...fakeSiteData, // signup_url should get added @@ -176,7 +177,7 @@ describe('Themes middleware', function () { comments_access: 'all' }); - should.deepEqual(data.custom, fakeCustomThemeSettingsData); + assert.deepEqual(data.custom, fakeCustomThemeSettingsData); done(); } catch (error) { diff --git a/ghost/core/test/unit/frontend/src/privacy.test.js b/ghost/core/test/unit/frontend/src/privacy.test.js index c4534e41c51..09b5b7b44bd 100644 --- a/ghost/core/test/unit/frontend/src/privacy.test.js +++ b/ghost/core/test/unit/frontend/src/privacy.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); // Use path relative to test file @@ -19,10 +20,10 @@ describe('Privacy Utils', function () { const result = maskSensitiveData(payload); const parsed = JSON.parse(result); - should.equal(parsed.user, '********'); - should.equal(parsed.user_id, '********'); - should.equal(parsed.email, '********'); - should.equal(parsed.normal, 'data'); + assert.equal(parsed.user, '********'); + assert.equal(parsed.user_id, '********'); + assert.equal(parsed.email, '********'); + assert.equal(parsed.normal, 'data'); }); it('should mask custom sensitive attributes', function () { @@ -35,8 +36,8 @@ describe('Privacy Utils', function () { const result = maskSensitiveData(payload, customAttributes); const parsed = JSON.parse(result); - should.equal(parsed.custom_field, '********'); - should.equal(parsed.normal, 'data'); + assert.equal(parsed.custom_field, '********'); + assert.equal(parsed.normal, 'data'); }); it('should handle nested objects', function () { @@ -53,9 +54,9 @@ describe('Privacy Utils', function () { const result = maskSensitiveData(payload); const parsed = JSON.parse(result); - should.equal(parsed.data.user, '********'); - should.equal(parsed.data.details.email, '********'); - should.equal(parsed.normal, 'data'); + assert.equal(parsed.data.user, '********'); + assert.equal(parsed.data.details.email, '********'); + assert.equal(parsed.normal, 'data'); }); it('should handle empty payloads', function () { @@ -64,7 +65,7 @@ describe('Privacy Utils', function () { const result = maskSensitiveData(payload); const parsed = JSON.parse(result); - should.deepEqual(parsed, {}); + assert.deepEqual(parsed, {}); }); }); @@ -77,10 +78,10 @@ describe('Privacy Utils', function () { const result = processPayload(payload); - should.equal(typeof result, 'string'); + assert.equal(typeof result, 'string'); const parsed = JSON.parse(result); - should.equal(parsed.email, '********'); - should.equal(parsed.normal, 'data'); + assert.equal(parsed.email, '********'); + assert.equal(parsed.normal, 'data'); }); it('should add global attributes to payload', function () { @@ -95,8 +96,8 @@ describe('Privacy Utils', function () { const result = processPayload(payload, globalAttributes); const parsed = JSON.parse(result); - should.equal(parsed.data, 'value'); - should.equal(parsed.global, 'attribute'); + assert.equal(parsed.data, 'value'); + assert.equal(parsed.global, 'attribute'); }); it('should return object when stringify is false', function () { @@ -107,9 +108,9 @@ describe('Privacy Utils', function () { const result = processPayload(payload, {}, false); - should.equal(typeof result, 'object'); - should.equal(result.email, '********'); - should.equal(result.normal, 'data'); + assert.equal(typeof result, 'object'); + assert.equal(result.email, '********'); + assert.equal(result.normal, 'data'); }); it('should mask sensitive data in global attributes', function () { @@ -123,8 +124,8 @@ describe('Privacy Utils', function () { const result = processPayload(payload, globalAttributes, false); - should.equal(result.email, '********'); - should.equal(result.normal, 'data'); + assert.equal(result.email, '********'); + assert.equal(result.normal, 'data'); }); it('should handle empty payload and attributes', function () { @@ -134,7 +135,7 @@ describe('Privacy Utils', function () { const result = processPayload(payload, globalAttributes); const parsed = JSON.parse(result); - should.deepEqual(parsed, {}); + assert.deepEqual(parsed, {}); }); }); }); \ No newline at end of file diff --git a/ghost/core/test/unit/frontend/src/url-attribution.test.js b/ghost/core/test/unit/frontend/src/url-attribution.test.js index 64a0864d6bc..025200161d6 100644 --- a/ghost/core/test/unit/frontend/src/url-attribution.test.js +++ b/ghost/core/test/unit/frontend/src/url-attribution.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const {JSDOM} = require('jsdom'); @@ -48,42 +49,42 @@ describe('URL Attribution Utils', function () { it('should extract ref parameter correctly', function () { const result = parseReferrerData('https://example.com/?ref=newsletter'); should.exist(result); - should.equal(result.source, 'newsletter'); + assert.equal(result.source, 'newsletter'); }); it('should extract source parameter correctly', function () { const result = parseReferrerData('https://example.com/?source=twitter'); should.exist(result); - should.equal(result.source, 'twitter'); + assert.equal(result.source, 'twitter'); }); it('should extract utm_source parameter correctly', function () { const result = parseReferrerData('https://example.com/?utm_source=facebook'); should.exist(result); - should.equal(result.source, 'facebook'); + assert.equal(result.source, 'facebook'); }); it('should handle portal hash URLs', function () { const result = parseReferrerData('https://example.com/#/portal/signup?ref=portal-hash'); should.exist(result); - should.equal(result.source, 'portal-hash'); + assert.equal(result.source, 'portal-hash'); }); it('should return document.referrer when no source params are present', function () { const result = parseReferrerData('https://example.com/'); should.exist(result); - should.equal(result.url, 'https://external-site.com/'); + assert.equal(result.url, 'https://external-site.com/'); }); it('should extract all UTM parameters', function () { const result = parseReferrerData('https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=summer&utm_term=ghost&utm_content=banner'); should.exist(result); - should.equal(result.utmSource, 'google'); - should.equal(result.utmMedium, 'cpc'); - should.equal(result.utmCampaign, 'summer'); - should.equal(result.utmTerm, 'ghost'); - should.equal(result.utmContent, 'banner'); - should.equal(result.source, 'google'); // source should be utm_source + assert.equal(result.utmSource, 'google'); + assert.equal(result.utmMedium, 'cpc'); + assert.equal(result.utmCampaign, 'summer'); + assert.equal(result.utmTerm, 'ghost'); + assert.equal(result.utmContent, 'banner'); + assert.equal(result.source, 'google'); // source should be utm_source }); }); @@ -91,25 +92,25 @@ describe('URL Attribution Utils', function () { it('should extract parameters from portal hash URL', function () { const result = parseReferrerData('https://example.com/#/portal/signup?ref=newsletter'); should.exist(result); - should.equal(result.source, 'newsletter'); + assert.equal(result.source, 'newsletter'); }); it('should handle multiple parameters in portal hash', function () { const result = parseReferrerData('https://example.com/#/portal/signup?ref=newsletter&utm_medium=email'); should.exist(result); - should.equal(result.source, 'newsletter'); - should.equal(result.medium, 'email'); + assert.equal(result.source, 'newsletter'); + assert.equal(result.medium, 'email'); }); it('should extract all UTM parameters from portal hash', function () { const result = parseReferrerData('https://example.com/#/portal/signup?utm_source=google&utm_medium=cpc&utm_campaign=summer&utm_term=ghost&utm_content=banner'); should.exist(result); - should.equal(result.utmSource, 'google'); - should.equal(result.utmMedium, 'cpc'); - should.equal(result.utmCampaign, 'summer'); - should.equal(result.utmTerm, 'ghost'); - should.equal(result.utmContent, 'banner'); - should.equal(result.source, 'google'); // source should be utm_source + assert.equal(result.utmSource, 'google'); + assert.equal(result.utmMedium, 'cpc'); + assert.equal(result.utmCampaign, 'summer'); + assert.equal(result.utmTerm, 'ghost'); + assert.equal(result.utmContent, 'banner'); + assert.equal(result.source, 'google'); // source should be utm_source }); }); @@ -117,49 +118,49 @@ describe('URL Attribution Utils', function () { it('should prioritize ref/source over medium and document.referrer', function () { // When ref is present along with utm_medium const result = getReferrer('https://example.com/?ref=newsletter&utm_medium=email'); - should.equal(result, 'newsletter'); + assert.equal(result, 'newsletter'); }); it('should prioritize utm_source over medium', function () { // When utm_source is present along with utm_medium const result = getReferrer('https://example.com/?utm_source=twitter&utm_medium=social'); - should.equal(result, 'twitter'); + assert.equal(result, 'twitter'); }); it('should fall back to utm_medium if no ref/source/utm_source', function () { // Only utm_medium is present const result = getReferrer('https://example.com/?utm_medium=email'); - should.equal(result, 'email'); + assert.equal(result, 'email'); }); it('should fall back to document.referrer if no params are present', function () { // No URL params, should use document.referrer (https://external-site.com/ from test setup) const result = getReferrer('https://example.com/'); - should.equal(result, 'https://external-site.com/'); + assert.equal(result, 'https://external-site.com/'); }); it('should return null if referrer matches current hostname', function () { // Same-domain referrer should be filtered out const result = getReferrer('https://example.com/?ref=https://example.com/some-page'); - should.equal(result, null); + assert.equal(result, null); }); it('should return non-URL referrers like ghost-newsletter', function () { // Non-URL refs should work fine const result = getReferrer('https://example.com/?ref=ghost-newsletter'); - should.equal(result, 'ghost-newsletter'); + assert.equal(result, 'ghost-newsletter'); }); }); describe('getReferrer', function () { it('should combine parse and final referrer functions', function () { const result = getReferrer('https://example.com/?ref=newsletter'); - should.equal(result, 'newsletter'); + assert.equal(result, 'newsletter'); }); it('should return null for same-domain referrers', function () { const result = getReferrer('https://example.com/?ref=https://example.com/page'); - should.equal(result, null); + assert.equal(result, null); }); }); }); \ No newline at end of file diff --git a/ghost/core/test/unit/frontend/utils/frontend-apps.test.js b/ghost/core/test/unit/frontend/utils/frontend-apps.test.js index 16f3f3a5cc3..6bb33075636 100644 --- a/ghost/core/test/unit/frontend/utils/frontend-apps.test.js +++ b/ghost/core/test/unit/frontend/utils/frontend-apps.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const {getFrontendAppConfig, getDataAttributes} = require('../../../../core/frontend/utils/frontend-apps'); const configUtils = require('../../../utils/config-utils'); @@ -16,9 +17,9 @@ describe('Frontend apps:', function () { it('should return app urls and version from config', async function () { const {stylesUrl, scriptUrl, appVersion} = getFrontendAppConfig('portal'); - should.equal(appVersion, '1.0'); - should.equal(stylesUrl, 'https://cdn.example.com/~1.0/main.css'); - should.equal(scriptUrl, 'https://cdn.example.com/~1.0/portal.min.js'); + assert.equal(appVersion, '1.0'); + assert.equal(stylesUrl, 'https://cdn.example.com/~1.0/main.css'); + assert.equal(scriptUrl, 'https://cdn.example.com/~1.0/portal.min.js'); }); }); @@ -29,13 +30,13 @@ describe('Frontend apps:', function () { 'example-version': '1.0' }); - should.equal(dataAttributes, 'data-admin="test" data-example-version="1.0"'); + assert.equal(dataAttributes, 'data-admin="test" data-example-version="1.0"'); }); it('should generate empty string for missing data object', async function () { const dataAttributes = getDataAttributes(); - should.equal(dataAttributes, ''); + assert.equal(dataAttributes, ''); }); }); }); diff --git a/ghost/core/test/unit/frontend/utils/member-count.test.js b/ghost/core/test/unit/frontend/utils/member-count.test.js index 8da0cacc0f6..db3ab4aa70f 100644 --- a/ghost/core/test/unit/frontend/utils/member-count.test.js +++ b/ghost/core/test/unit/frontend/utils/member-count.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const {memberCountRounding, getMemberStats} = require('../../../../core/frontend/utils/member-count'); @@ -38,13 +39,13 @@ describe('Member Count', function () { meta: {totals: {paid: 1000, free: 500, comped: 500}} }}; const members = await getMemberStats.call(meta); - should.equal(members.total, 2000); + assert.equal(members.total, 2000); }); it('should return rounded numbers in correct format', function () { getMemberStatsMock.map((mock) => { const result = memberCountRounding(mock.members); - return should.equal(result, mock.expected); + return assert.equal(result, mock.expected); }); }); }); diff --git a/ghost/core/test/unit/server/adapters/scheduling/post-scheduling/post-scheduler.test.js b/ghost/core/test/unit/server/adapters/scheduling/post-scheduling/post-scheduler.test.js index 1c27a77e893..498051d2c09 100644 --- a/ghost/core/test/unit/server/adapters/scheduling/post-scheduling/post-scheduler.test.js +++ b/ghost/core/test/unit/server/adapters/scheduling/post-scheduling/post-scheduler.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const errors = require('@tryghost/errors'); const should = require('should'); const sinon = require('sinon'); @@ -80,7 +81,7 @@ describe('Scheduling: Post Scheduler', function () { adapter.schedule.args[0][0].time.should.equal(moment(post.get('published_at')).valueOf()); adapter.schedule.args[0][0].url.should.startWith(urlUtils.urlJoin('http://scheduler.local:1111/', 'schedules', 'posts', post.get('id'), '?token=')); adapter.schedule.args[0][0].extra.httpMethod.should.eql('PUT'); - should.equal(null, adapter.schedule.args[0][0].extra.oldTime); + assert.equal(null, adapter.schedule.args[0][0].extra.oldTime); }); }); diff --git a/ghost/core/test/unit/server/adapters/scheduling/utils.test.js b/ghost/core/test/unit/server/adapters/scheduling/utils.test.js index a53e15bd852..982d700422e 100644 --- a/ghost/core/test/unit/server/adapters/scheduling/utils.test.js +++ b/ghost/core/test/unit/server/adapters/scheduling/utils.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const fs = require('fs-extra'); const configUtils = require('../../../../utils/config-utils'); @@ -79,7 +80,7 @@ describe('Scheduling: utils', function () { }); schedulingUtils.createAdapter().catch(function (err) { should.exist(err); - should.equal(err.errorType, 'IncorrectUsageError'); + assert.equal(err.errorType, 'IncorrectUsageError'); done(); }); }); diff --git a/ghost/core/test/unit/server/adapters/storage/index.test.js b/ghost/core/test/unit/server/adapters/storage/index.test.js index b5cbb9ebf65..30f062477cc 100644 --- a/ghost/core/test/unit/server/adapters/storage/index.test.js +++ b/ghost/core/test/unit/server/adapters/storage/index.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const fs = require('fs-extra'); const StorageBase = require('ghost-storage-base'); @@ -90,7 +91,7 @@ describe('storage: index_spec', function () { storage.getStorage(); } catch (err) { should.exist(err); - should.equal(err.errorType, 'IncorrectUsageError'); + assert.equal(err.errorType, 'IncorrectUsageError'); } }); }); diff --git a/ghost/core/test/unit/server/data/exporter/index.test.js b/ghost/core/test/unit/server/data/exporter/index.test.js index 437b40f5d69..240802ab3e6 100644 --- a/ghost/core/test/unit/server/data/exporter/index.test.js +++ b/ghost/core/test/unit/server/data/exporter/index.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const errors = require('@tryghost/errors'); @@ -221,7 +222,7 @@ describe('Exporter', function () { // NOTE: this test is serving a role of a reminder to have a look into exported tables allowlists // if it failed you probably need to add or remove a table entry from table-lists module - should.deepEqual(actualTables, expectedTables); + assert.deepEqual(actualTables, expectedTables); }); it('should be fixed when default settings is changed', function () { diff --git a/ghost/core/test/unit/server/data/importer/import-manager.test.js b/ghost/core/test/unit/server/data/importer/import-manager.test.js index 519e44e83d1..f97b5e7f443 100644 --- a/ghost/core/test/unit/server/data/importer/import-manager.test.js +++ b/ghost/core/test/unit/server/data/importer/import-manager.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const fs = require('fs-extra'); const path = require('path'); @@ -15,7 +16,7 @@ describe('Import Manager', function () { const filePath = path.join(extractedPath, file); const stats = fs.statSync(filePath); const fileMode = stats.mode & 0o777; - should.equal(fileMode, 0o644, `File ${file} should have 0644 permissions`); + assert.equal(fileMode, 0o644, `File ${file} should have 0644 permissions`); }); } finally { await fs.remove(extractedPath); diff --git a/ghost/core/test/unit/server/data/importer/importers/data/posts.test.js b/ghost/core/test/unit/server/data/importer/importers/data/posts.test.js index 328317ad5a8..edbf192ee56 100644 --- a/ghost/core/test/unit/server/data/importer/importers/data/posts.test.js +++ b/ghost/core/test/unit/server/data/importer/importers/data/posts.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const find = require('lodash/find'); const PostsImporter = require('../../../../../../../core/server/data/importer/importers/data/posts-importer'); @@ -134,7 +135,7 @@ describe('PostsImporter', function () { const post = find(importer.dataToImport, {slug: 'post-with-newsletter'}); should.exist(post); - should.equal(post.mobiledoc, null); + assert.equal(post.mobiledoc, undefined); }); }); }); diff --git a/ghost/core/test/unit/server/data/importer/importers/data/settings.test.js b/ghost/core/test/unit/server/data/importer/importers/data/settings.test.js index 67cb1b73768..3d6b6559c19 100644 --- a/ghost/core/test/unit/server/data/importer/importers/data/settings.test.js +++ b/ghost/core/test/unit/server/data/importer/importers/data/settings.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const find = require('lodash/find'); const should = require('should'); const SettingsImporter = require('../../../../../../../core/server/data/importer/importers/data/settings-importer'); @@ -19,7 +20,7 @@ describe('SettingsImporter', function () { const passwordSetting = find(importer.dataToImport, {key: 'password'}); - should.equal(passwordSetting, undefined); + assert.equal(passwordSetting, undefined); }); it('Removes the is_private setting', function () { @@ -37,7 +38,7 @@ describe('SettingsImporter', function () { const passwordSetting = find(importer.dataToImport, {key: 'is_private'}); - should.equal(passwordSetting, undefined); + assert.equal(passwordSetting, undefined); }); it('Does not overwrite members from address', function () { diff --git a/ghost/core/test/unit/server/data/migrations/utils.test.js b/ghost/core/test/unit/server/data/migrations/utils.test.js index 5cc72c60b9d..0bc40859205 100644 --- a/ghost/core/test/unit/server/data/migrations/utils.test.js +++ b/ghost/core/test/unit/server/data/migrations/utils.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const errors = require('@tryghost/errors'); @@ -393,7 +394,7 @@ describe('migrations/utils/permissions', function () { await runUpMigration(knex, migration); should.fail('addPermissionToRole up migration did not throw'); } catch (err) { - should.equal(errors.utils.isGhostError(err), true); + assert.equal(errors.utils.isGhostError(err), true); err.message.should.equal('Cannot add permission(Unimaginable) with role(Not there) - permission does not exist'); } }); @@ -426,7 +427,7 @@ describe('migrations/utils/permissions', function () { await runUpMigration(knex, migration); should.fail('addPermissionToRole did not throw'); } catch (err) { - should.equal(errors.utils.isGhostError(err), true); + assert.equal(errors.utils.isGhostError(err), true); err.message.should.equal('Cannot add permission(Permission Name) with role(Not there) - role does not exist'); } }); @@ -595,17 +596,17 @@ describe('migrations/utils/settings', function () { return row.key === 'test_key'; }); - should.equal(addedSettingAfterUp.key, 'test_key', 'The setting was added to the database'); - should.equal(addedSettingAfterUp.value, 'test_value'); - should.equal(addedSettingAfterUp.type, 'string'); - should.equal(addedSettingAfterUp.group, 'test_group'); - should.equal(addedSettingAfterUp.flags, 'PUBLIC'); + assert.equal(addedSettingAfterUp.key, 'test_key', 'The setting was added to the database'); + assert.equal(addedSettingAfterUp.value, 'test_value'); + assert.equal(addedSettingAfterUp.type, 'string'); + assert.equal(addedSettingAfterUp.group, 'test_group'); + assert.equal(addedSettingAfterUp.flags, 'PUBLIC'); await runDownMigration(); const allSettingsAfterDown = await knex('settings').select(); - should.equal(allSettingsAfterDown.length, 0, 'The setting was removed'); + assert.equal(allSettingsAfterDown.length, 0, 'The setting was removed'); }); it('Skips adding if setting already exists', async function () { @@ -638,13 +639,13 @@ describe('migrations/utils/settings', function () { return row.key === 'test_key'; }); - should.equal(existingSetting.value, 'test_value', 'The original value was preserved'); + assert.equal(existingSetting.value, 'test_value', 'The original value was preserved'); await runDownMigration(); const allSettingsAfterDown = await knex('settings').select(); - should.equal(allSettingsAfterDown.length, 0, 'The setting was removed'); + assert.equal(allSettingsAfterDown.length, 0, 'The setting was removed'); }); }); @@ -676,10 +677,10 @@ describe('migrations/utils/settings', function () { return row.key === 'remove_test_key'; }); - should.equal(allSettingsAtStart.length, 1, 'Started with one setting'); - should.equal(allSettingsAfterUp.length, 0, 'Setting was removed'); - should.equal(allSettingsAfterDown.length, 1, 'Ended with one setting'); - should.equal(restoredSettingAfterDown.key, 'remove_test_key', 'Setting was restored'); + assert.equal(allSettingsAtStart.length, 1, 'Started with one setting'); + assert.equal(allSettingsAfterUp.length, 0, 'Setting was removed'); + assert.equal(allSettingsAfterDown.length, 1, 'Ended with one setting'); + assert.equal(restoredSettingAfterDown.key, 'remove_test_key', 'Setting was restored'); }); it('Skips removal if setting does not exist', async function () { @@ -697,9 +698,9 @@ describe('migrations/utils/settings', function () { const allSettingsAfterDown = await knex('settings').select(); - should.equal(allSettingsAtStart.length, 0, 'No settings in place at the start'); - should.equal(allSettingsAfterUp.length, 0, 'No settings were removed'); - should.equal(allSettingsAfterDown.length, 0, 'No settings were restored'); + assert.equal(allSettingsAtStart.length, 0, 'No settings in place at the start'); + assert.equal(allSettingsAfterUp.length, 0, 'No settings were removed'); + assert.equal(allSettingsAfterDown.length, 0, 'No settings were restored'); }); }); }); @@ -752,18 +753,18 @@ describe('migrations/utils/schema nullable functions', function () { // Verify initial state - column should be not nullable const isNullableInitial = await checkColumnNullable('test_nullable_migration', 'not_nullable_col', knex); - should.equal(isNullableInitial, false, 'Column should initially be not nullable'); + assert.equal(isNullableInitial, false, 'Column should initially be not nullable'); const runDownMigration = await runUpMigration(knex, migration); // Verify column is now nullable const isNullableAfter = await checkColumnNullable('test_nullable_migration', 'not_nullable_col', knex); - should.equal(isNullableAfter, true, 'Column should be nullable after up migration'); + assert.equal(isNullableAfter, true, 'Column should be nullable after up migration'); // Test down migration await runDownMigration(); const isNullableAfterDown = await checkColumnNullable('test_nullable_migration', 'not_nullable_col', knex); - should.equal(isNullableAfterDown, false, 'Column should be not nullable after down migration'); + assert.equal(isNullableAfterDown, false, 'Column should be not nullable after down migration'); await knex.destroy(); }); @@ -775,7 +776,7 @@ describe('migrations/utils/schema nullable functions', function () { // Verify initial state - column should already be nullable const isNullableInitial = await checkColumnNullable('test_nullable_migration', 'nullable_col', knex); - should.equal(isNullableInitial, true, 'Column should initially be nullable'); + assert.equal(isNullableInitial, true, 'Column should initially be nullable'); // Spy on logging to verify skip message const logSpy = sinon.spy(logging, 'warn'); @@ -787,7 +788,7 @@ describe('migrations/utils/schema nullable functions', function () { // Column should still be nullable const isNullableAfter = await checkColumnNullable('test_nullable_migration', 'nullable_col', knex); - should.equal(isNullableAfter, true, 'Column should still be nullable'); + assert.equal(isNullableAfter, true, 'Column should still be nullable'); await runDownMigration(); } finally { @@ -808,18 +809,18 @@ describe('migrations/utils/schema nullable functions', function () { // Verify initial state - column should be nullable const isNullableInitial = await checkColumnNullable('test_nullable_migration', 'nullable_col', knex); - should.equal(isNullableInitial, true, 'Column should initially be nullable'); + assert.equal(isNullableInitial, true, 'Column should initially be nullable'); const runDownMigration = await runUpMigration(knex, migration); // Verify column is now not nullable const isNotNullableAfter = await checkColumnNullable('test_nullable_migration', 'nullable_col', knex); - should.equal(isNotNullableAfter, false, 'Column should be not nullable after up migration'); + assert.equal(isNotNullableAfter, false, 'Column should be not nullable after up migration'); // Test down migration (should set back to nullable) await runDownMigration(); const isNullableAfterDown = await checkColumnNullable('test_nullable_migration', 'nullable_col', knex); - should.equal(isNullableAfterDown, true, 'Column should be nullable after down migration'); + assert.equal(isNullableAfterDown, true, 'Column should be nullable after down migration'); await knex.destroy(); }); @@ -831,7 +832,7 @@ describe('migrations/utils/schema nullable functions', function () { // Verify initial state - column should already be not nullable const isNotNullableInitial = await checkColumnNullable('test_nullable_migration', 'not_nullable_col', knex); - should.equal(isNotNullableInitial, false, 'Column should initially be not nullable'); + assert.equal(isNotNullableInitial, false, 'Column should initially be not nullable'); // Spy on logging to verify skip message const logSpy = sinon.spy(require('@tryghost/logging'), 'warn'); @@ -843,7 +844,7 @@ describe('migrations/utils/schema nullable functions', function () { // Column should still be not nullable const isNotNullableAfter = await checkColumnNullable('test_nullable_migration', 'not_nullable_col', knex); - should.equal(isNotNullableAfter, false, 'Column should still be not nullable'); + assert.equal(isNotNullableAfter, false, 'Column should still be not nullable'); await runDownMigration(); } finally { @@ -861,8 +862,8 @@ describe('migrations/utils/schema nullable functions', function () { const nullableResult = await checkColumnNullable('test_nullable_migration', 'nullable_col', knex); const notNullableResult = await checkColumnNullable('test_nullable_migration', 'not_nullable_col', knex); - should.equal(nullableResult, true, 'Should identify nullable column correctly'); - should.equal(notNullableResult, false, 'Should identify not nullable column correctly'); + assert.equal(nullableResult, true, 'Should identify nullable column correctly'); + assert.equal(notNullableResult, false, 'Should identify not nullable column correctly'); await knex.destroy(); }); diff --git a/ghost/core/test/unit/server/data/schema/commands.test.js b/ghost/core/test/unit/server/data/schema/commands.test.js index 6a3f30535cc..7b92b9588e9 100644 --- a/ghost/core/test/unit/server/data/schema/commands.test.js +++ b/ghost/core/test/unit/server/data/schema/commands.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const errors = require('@tryghost/errors'); @@ -14,7 +15,7 @@ describe('schema commands', function () { await commands._hasForeignSQLite({transaction: knex}); should.fail('addForeign did not throw'); } catch (err) { - should.equal(errors.utils.isGhostError(err), true); + assert.equal(errors.utils.isGhostError(err), true); err.message.should.equal('Must use hasForeignSQLite3 on an SQLite3 database'); } }); @@ -29,7 +30,7 @@ describe('schema commands', function () { await commands._hasPrimaryKeySQLite(null, knex); should.fail('hasPrimaryKeySQLite did not throw'); } catch (err) { - should.equal(errors.utils.isGhostError(err), true); + assert.equal(errors.utils.isGhostError(err), true); err.message.should.equal('Must use hasPrimaryKeySQLite on an SQLite3 database'); } }); diff --git a/ghost/core/test/unit/server/data/schema/fixtures/fixture-manager.test.js b/ghost/core/test/unit/server/data/schema/fixtures/fixture-manager.test.js index 98a56d70ebd..5e1df44a81a 100644 --- a/ghost/core/test/unit/server/data/schema/fixtures/fixture-manager.test.js +++ b/ghost/core/test/unit/server/data/schema/fixtures/fixture-manager.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); @@ -318,10 +319,10 @@ describe('Migration Fixture Utils', function () { addFixturesForRelationStub.callCount.should.eql(fixtures.relations.length); // NOTE: users and roles have to be initialized first for the post fixtures to work - should.equal(addFixturesForModelStub.firstCall.args[0].name, 'Role'); - should.equal(addFixturesForModelStub.secondCall.args[0].name, 'User'); + assert.equal(addFixturesForModelStub.firstCall.args[0].name, 'Role'); + assert.equal(addFixturesForModelStub.secondCall.args[0].name, 'User'); - should.equal(addFixturesForRelationStub.firstCall.args[0].from.relation, 'roles'); + assert.equal(addFixturesForRelationStub.firstCall.args[0].from.relation, 'roles'); }); }); diff --git a/ghost/core/test/unit/server/lib/image/blog-icon.test.js b/ghost/core/test/unit/server/lib/image/blog-icon.test.js index 4d24bf261e9..3beb07dc8a1 100644 --- a/ghost/core/test/unit/server/lib/image/blog-icon.test.js +++ b/ghost/core/test/unit/server/lib/image/blog-icon.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const path = require('path'); @@ -83,7 +84,7 @@ describe('lib/image: blog icon', function () { get: () => {} }}); - should.equal(blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}), null); + assert.equal(blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}), null); }); }); }); diff --git a/ghost/core/test/unit/server/lib/image/cached-image-size-from-url.test.js b/ghost/core/test/unit/server/lib/image/cached-image-size-from-url.test.js index a12cebaa996..97f38420919 100644 --- a/ghost/core/test/unit/server/lib/image/cached-image-size-from-url.test.js +++ b/ghost/core/test/unit/server/lib/image/cached-image-size-from-url.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const errors = require('@tryghost/errors'); const should = require('should'); const sinon = require('sinon'); @@ -76,7 +77,7 @@ describe('lib/image: image size cache', function () { cacheStore.get(url).should.not.be.undefined; const image = cacheStore.get(url); - should.equal(image.url, 'http://mysite.com/content/image/mypostcoverimage.jpg'); + assert.equal(image.url, 'http://mysite.com/content/image/mypostcoverimage.jpg'); should.not.exist(image.width); should.not.exist(image.height); sinon.assert.calledOnce(loggingStub); @@ -97,7 +98,7 @@ describe('lib/image: image size cache', function () { cacheStore.get(url).should.not.be.undefined; const image = cacheStore.get(url); - should.equal(image.url, 'http://mysite.com/content/image/mypostcoverimage.jpg'); + assert.equal(image.url, 'http://mysite.com/content/image/mypostcoverimage.jpg'); should.not.exist(image.width); should.not.exist(image.height); }); diff --git a/ghost/core/test/unit/server/models/api-key.test.js b/ghost/core/test/unit/server/models/api-key.test.js index 4ab4128867e..a707a344f46 100644 --- a/ghost/core/test/unit/server/models/api-key.test.js +++ b/ghost/core/test/unit/server/models/api-key.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const models = require('../../../../core/server/models'); const should = require('should'); const sinon = require('sinon'); @@ -17,10 +18,10 @@ describe('Unit: models/api_key', function () { const result = models.ApiKey.refreshSecret(fakeData, fakeOptions); - should.equal(result, editStub.returnValues[0]); - should.equal(editStub.args[0][0].id, 'TREVOR'); - should.equal(editStub.args[0][0].secret.length, 64); - should.equal(editStub.args[0][1], fakeOptions); + assert.equal(result, editStub.returnValues[0]); + assert.equal(editStub.args[0][0].id, 'TREVOR'); + assert.equal(editStub.args[0][0].secret.length, 64); + assert.equal(editStub.args[0][1], fakeOptions); sinon.restore(); }); @@ -36,10 +37,10 @@ describe('Unit: models/api_key', function () { const result = models.ApiKey.refreshSecret(fakeData, fakeOptions); - should.equal(result, editStub.returnValues[0]); - should.equal(editStub.args[0][0].id, 'TREVOR'); - should.equal(editStub.args[0][0].secret.length, 26); - should.equal(editStub.args[0][1], fakeOptions); + assert.equal(result, editStub.returnValues[0]); + assert.equal(editStub.args[0][0].id, 'TREVOR'); + assert.equal(editStub.args[0][0].secret.length, 26); + assert.equal(editStub.args[0][1], fakeOptions); sinon.restore(); }); diff --git a/ghost/core/test/unit/server/models/base/crud.test.js b/ghost/core/test/unit/server/models/base/crud.test.js index 92cadfa793a..bef8f54e465 100644 --- a/ghost/core/test/unit/server/models/base/crud.test.js +++ b/ghost/core/test/unit/server/models/base/crud.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const errors = require('@tryghost/errors'); const should = require('should'); const sinon = require('sinon'); @@ -28,17 +29,17 @@ describe('Models: crud', function () { const destroyStub = sinon.stub(model, 'destroy'); return models.Base.Model.destroy(unfilteredOptions).then(() => { - should.equal(filterOptionsSpy.args[0][0], unfilteredOptions); - should.equal(filterOptionsSpy.args[0][1], 'destroy'); + assert.equal(filterOptionsSpy.args[0][0], unfilteredOptions); + assert.equal(filterOptionsSpy.args[0][1], 'destroy'); - should.deepEqual(forgeStub.args[0][0], { + assert.deepEqual(forgeStub.args[0][0], { prop: 'whatever' }); const filteredOptions = filterOptionsSpy.returnValues[0]; - should.equal(fetchStub.args[0][0], filteredOptions); - should.equal(destroyStub.args[0][0], filteredOptions); + assert.equal(fetchStub.args[0][0], filteredOptions); + assert.equal(destroyStub.args[0][0], filteredOptions); }); }); @@ -55,17 +56,17 @@ describe('Models: crud', function () { const destroyStub = sinon.stub(model, 'destroy'); return models.Base.Model.destroy(unfilteredOptions).then(() => { - should.equal(filterOptionsSpy.args[0][0], unfilteredOptions); - should.equal(filterOptionsSpy.args[0][1], 'destroy'); + assert.equal(filterOptionsSpy.args[0][0], unfilteredOptions); + assert.equal(filterOptionsSpy.args[0][1], 'destroy'); - should.deepEqual(forgeStub.args[0][0], { + assert.deepEqual(forgeStub.args[0][0], { id: 23 }); const filteredOptions = filterOptionsSpy.returnValues[0]; - should.equal(fetchStub.args[0][0], filteredOptions); - should.equal(destroyStub.args[0][0], filteredOptions); + assert.equal(fetchStub.args[0][0], filteredOptions); + assert.equal(destroyStub.args[0][0], filteredOptions); }); }); }); @@ -90,18 +91,18 @@ describe('Models: crud', function () { const findOneReturnValue = models.Base.Model.findOne(data, unfilteredOptions); return findOneReturnValue.then((result) => { - should.equal(result, fetchedModel); + assert.equal(result, fetchedModel); - should.equal(filterOptionsSpy.args[0][0], unfilteredOptions); - should.equal(filterOptionsSpy.args[0][1], 'findOne'); + assert.equal(filterOptionsSpy.args[0][0], unfilteredOptions); + assert.equal(filterOptionsSpy.args[0][1], 'findOne'); - should.equal(filterDataSpy.args[0][0], data); + assert.equal(filterDataSpy.args[0][0], data); const filteredData = filterDataSpy.returnValues[0]; - should.deepEqual(forgeStub.args[0][0], filteredData); + assert.deepEqual(forgeStub.args[0][0], filteredData); const filteredOptions = filterOptionsSpy.returnValues[0]; - should.equal(fetchStub.args[0][0], filteredOptions); + assert.equal(fetchStub.args[0][0], filteredOptions); }); }); @@ -125,7 +126,7 @@ describe('Models: crud', function () { await models.Base.Model.findOne(data, unfilteredOptions); - should.equal(fetchStub.args[0][0].lock, 'forUpdate'); + assert.equal(fetchStub.args[0][0].lock, 'forUpdate'); }); }); @@ -149,23 +150,23 @@ describe('Models: crud', function () { .resolves(savedModel); return models.Base.Model.edit(data, unfilteredOptions).then((result) => { - should.equal(result, savedModel); + assert.equal(result, savedModel); - should.equal(filterOptionsSpy.args[0][0], unfilteredOptions); - should.equal(filterOptionsSpy.args[0][1], 'edit'); + assert.equal(filterOptionsSpy.args[0][0], unfilteredOptions); + assert.equal(filterOptionsSpy.args[0][1], 'edit'); - should.equal(filterDataSpy.args[0][0], data); + assert.equal(filterDataSpy.args[0][0], data); const filteredOptions = filterOptionsSpy.returnValues[0]; - should.deepEqual(forgeStub.args[0][0], {id: filteredOptions.id}); + assert.deepEqual(forgeStub.args[0][0], {id: filteredOptions.id}); - should.equal(fetchStub.args[0][0], filteredOptions); - should.equal(fetchStub.args[0][0].lock, undefined); + assert.equal(fetchStub.args[0][0], filteredOptions); + assert.equal(fetchStub.args[0][0].lock, undefined); const filteredData = filterDataSpy.returnValues[0]; - should.equal(saveStub.args[0][0], filteredData); - should.equal(saveStub.args[0][1].method, 'update'); - should.deepEqual(saveStub.args[0][1], filteredOptions); + assert.equal(saveStub.args[0][0], filteredData); + assert.equal(saveStub.args[0][1].method, 'update'); + assert.deepEqual(saveStub.args[0][1], filteredOptions); }); }); @@ -184,7 +185,7 @@ describe('Models: crud', function () { .resolves(); return models.Base.Model.findOne(data, unfilteredOptions).then(() => { - should.equal(fetchStub.args[0][0].lock, undefined); + assert.equal(fetchStub.args[0][0].lock, undefined); }); }); @@ -200,7 +201,7 @@ describe('Models: crud', function () { sinon.stub(model, 'fetch').resolves(); return models.Base.Model.findOne(data, unfilteredOptions).then(() => { - should.equal(model.hasTimestamps, true); + assert.equal(model.hasTimestamps, true); }); }); @@ -242,20 +243,20 @@ describe('Models: crud', function () { .resolves(savedModel); return models.Base.Model.add(data, unfilteredOptions).then((result) => { - should.equal(result, savedModel); + assert.equal(result, savedModel); - should.equal(filterOptionsSpy.args[0][0], unfilteredOptions); - should.equal(filterOptionsSpy.args[0][1], 'add'); + assert.equal(filterOptionsSpy.args[0][0], unfilteredOptions); + assert.equal(filterOptionsSpy.args[0][1], 'add'); - should.equal(filterDataSpy.args[0][0], data); + assert.equal(filterDataSpy.args[0][0], data); const filteredData = filterDataSpy.returnValues[0]; - should.deepEqual(forgeStub.args[0][0], filteredData); + assert.deepEqual(forgeStub.args[0][0], filteredData); const filteredOptions = filterOptionsSpy.returnValues[0]; - should.equal(saveStub.args[0][0], null); - should.equal(saveStub.args[0][1].method, 'insert'); - should.deepEqual(saveStub.args[0][1], filteredOptions); + assert.equal(saveStub.args[0][0], null); + assert.equal(saveStub.args[0][1].method, 'insert'); + assert.deepEqual(saveStub.args[0][1], filteredOptions); }); }); @@ -271,7 +272,7 @@ describe('Models: crud', function () { sinon.stub(model, 'save').resolves(); return models.Base.Model.add(data, unfilteredOptions).then(() => { - should.equal(model.hasTimestamps, false); + assert.equal(model.hasTimestamps, false); }); }); }); diff --git a/ghost/core/test/unit/server/models/custom-theme-setting.test.js b/ghost/core/test/unit/server/models/custom-theme-setting.test.js index 0f1807bddaf..229145a70ce 100644 --- a/ghost/core/test/unit/server/models/custom-theme-setting.test.js +++ b/ghost/core/test/unit/server/models/custom-theme-setting.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const models = require('../../../../core/server/models'); @@ -11,28 +12,28 @@ describe('Unit: models/custom-theme-setting', function () { const setting = models.CustomThemeSetting.forge(); let returns = setting.parse({theme: 'test', key: 'dark_mode', value: 'false', type: 'boolean'}); - should.equal(returns.value, false); + assert.equal(returns.value, false); returns = setting.parse({theme: 'test', key: 'dark_mode', value: false, type: 'boolean'}); - should.equal(returns.value, false); + assert.equal(returns.value, false); returns = setting.parse({theme: 'test', key: 'dark_mode', value: true, type: 'boolean'}); - should.equal(returns.value, true); + assert.equal(returns.value, true); returns = setting.parse({theme: 'test', key: 'dark_mode', value: 'true', type: 'boolean'}); - should.equal(returns.value, true); + assert.equal(returns.value, true); returns = setting.parse({theme: 'test', key: 'dark_mode', value: '0', type: 'boolean'}); - should.equal(returns.value, false); + assert.equal(returns.value, false); returns = setting.parse({theme: 'test', key: 'dark_mode', value: '1', type: 'boolean'}); - should.equal(returns.value, true); + assert.equal(returns.value, true); returns = setting.parse({theme: 'test', key: 'something', value: 'null', type: 'select'}); - should.equal(returns.value, 'null'); + assert.equal(returns.value, 'null'); returns = setting.parse({theme: 'test', key: 'something', value: '__GHOST_URL__/assets/image.jpg', type: 'image'}); - should.equal(returns.value, 'http://127.0.0.1:2369/assets/image.jpg'); + assert.equal(returns.value, 'http://127.0.0.1:2369/assets/image.jpg'); }); }); @@ -41,23 +42,23 @@ describe('Unit: models/custom-theme-setting', function () { const setting = models.CustomThemeSetting.forge(); let returns = setting.format({theme: 'test', key: 'dark_mode', value: '0', type: 'boolean'}); - should.equal(returns.value, 'false'); + assert.equal(returns.value, 'false'); returns = setting.format({theme: 'test', key: 'dark_mode', value: '1', type: 'boolean'}); - should.equal(returns.value, 'true'); + assert.equal(returns.value, 'true'); returns = setting.format({theme: 'test', key: 'dark_mode', value: 'false', type: 'boolean'}); - should.equal(returns.value, 'false'); + assert.equal(returns.value, 'false'); returns = setting.format({theme: 'test', key: 'dark_mode', value: 'true', type: 'boolean'}); - should.equal(returns.value, 'true'); + assert.equal(returns.value, 'true'); }); it('transforms urls when persisting to db', function () { const setting = models.CustomThemeSetting.forge(); let returns = setting.formatOnWrite({theme: 'test', key: 'something', value: '/assets/image.jpg', type: 'image'}); - should.equal(returns.value, '__GHOST_URL__/assets/image.jpg'); + assert.equal(returns.value, '__GHOST_URL__/assets/image.jpg'); }); }); }); diff --git a/ghost/core/test/unit/server/models/integration.test.js b/ghost/core/test/unit/server/models/integration.test.js index 5fddde8c25e..bcadbeb003a 100644 --- a/ghost/core/test/unit/server/models/integration.test.js +++ b/ghost/core/test/unit/server/models/integration.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const models = require('../../../../core/server/models'); @@ -23,12 +24,12 @@ describe('Unit: models/integration', function () { it('returns the base permittedOptions result', function () { const returnedOptions = models.Integration.permittedOptions(); - should.deepEqual(returnedOptions, basePermittedOptionsReturnVal); + assert.deepEqual(returnedOptions, basePermittedOptionsReturnVal); }); it('returns the base permittedOptions result plus "filter" when methodName is findOne', function () { const returnedOptions = models.Integration.permittedOptions('findOne'); - should.deepEqual(returnedOptions, basePermittedOptionsReturnVal.concat('filter')); + assert.deepEqual(returnedOptions, basePermittedOptionsReturnVal.concat('filter')); }); }); diff --git a/ghost/core/test/unit/server/models/session.test.js b/ghost/core/test/unit/server/models/session.test.js index aebfe9681ef..d5bbbfc0182 100644 --- a/ghost/core/test/unit/server/models/session.test.js +++ b/ghost/core/test/unit/server/models/session.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const models = require('../../../../core/server/models'); @@ -24,8 +25,8 @@ describe('Unit: models/session', function () { }) }; const parsed = parse(attrs); - should.equal(typeof parsed.session_data, 'object'); - should.equal(parsed.session_data.some, 'data'); + assert.equal(typeof parsed.session_data, 'object'); + assert.equal(parsed.session_data.some, 'data'); }); }); @@ -42,8 +43,8 @@ describe('Unit: models/session', function () { } }; const formatted = format(attrs); - should.equal(typeof formatted.session_data, 'string'); - should.equal(formatted.session_data, JSON.stringify({ + assert.equal(typeof formatted.session_data, 'string'); + assert.equal(formatted.session_data, JSON.stringify({ some: 'data' })); }); @@ -53,7 +54,7 @@ describe('Unit: models/session', function () { id: 'something' }; const formatted = format(attrs); - should.equal(formatted.session_data, undefined); + assert.equal(formatted.session_data, undefined); }); }); @@ -63,7 +64,7 @@ describe('Unit: models/session', function () { const belongsToSpy = sinon.spy(model, 'belongsTo'); model.user(); - should.equal(belongsToSpy.args[0][0], 'User'); + assert.equal(belongsToSpy.args[0][0], 'User'); }); }); @@ -81,26 +82,26 @@ describe('Unit: models/session', function () { const methodName = 'methodName'; models.Session.permittedOptions(methodName); - should.equal(basePermittedOptionsStub.args[0][0], methodName); - should.equal(basePermittedOptionsStub.thisValues[0], models.Session); + assert.equal(basePermittedOptionsStub.args[0][0], methodName); + assert.equal(basePermittedOptionsStub.thisValues[0], models.Session); }); it('returns the base permittedOptions result', function () { const returnedOptions = models.Session.permittedOptions(); - should.deepEqual(returnedOptions, basePermittedOptionsReturnVal); + assert.deepEqual(returnedOptions, basePermittedOptionsReturnVal); }); it('returns the base permittedOptions result plus "session_id" when methodName is upsert', function () { const returnedOptions = models.Session.permittedOptions('upsert'); - should.deepEqual(returnedOptions, basePermittedOptionsReturnVal.concat('session_id')); + assert.deepEqual(returnedOptions, basePermittedOptionsReturnVal.concat('session_id')); }); it('returns the base permittedOptions result plus "session_id" when methodName is destroy', function () { const returnedOptions = models.Session.permittedOptions('destroy'); - should.deepEqual(returnedOptions, basePermittedOptionsReturnVal.concat('session_id')); + assert.deepEqual(returnedOptions, basePermittedOptionsReturnVal.concat('session_id')); }); }); @@ -113,8 +114,8 @@ describe('Unit: models/session', function () { const options = {id: 1}; const returnVal = models.Session.destroy(options); - should.equal(baseDestroyStub.args[0][0], options); - should.equal(returnVal, baseDestroyReturnVal); + assert.equal(baseDestroyStub.args[0][0], options); + assert.equal(returnVal, baseDestroyReturnVal); }); it('calls forge with the session_id, fetchs with the filtered options and then destroys with the options', function (done) { @@ -133,13 +134,13 @@ describe('Unit: models/session', function () { .resolves(); models.Session.destroy(unfilteredOptions).then(() => { - should.equal(filterOptionsStub.args[0][0], unfilteredOptions); - should.equal(filterOptionsStub.args[0][1], 'destroy'); + assert.equal(filterOptionsStub.args[0][0], unfilteredOptions); + assert.equal(filterOptionsStub.args[0][1], 'destroy'); - should.deepEqual(forgeStub.args[0][0], {session_id}); + assert.deepEqual(forgeStub.args[0][0], {session_id}); - should.equal(fetchStub.args[0][0], filteredOptions); - should.equal(destroyStub.args[0][0], filteredOptions); + assert.equal(fetchStub.args[0][0], filteredOptions); + assert.equal(destroyStub.args[0][0], filteredOptions); done(); }); @@ -166,21 +167,21 @@ describe('Unit: models/session', function () { const addStub = sinon.stub(models.Session, 'add'); models.Session.upsert(data, unfilteredOptions).then(() => { - should.equal(filterOptionsStub.args[0][0], unfilteredOptions); - should.equal(filterOptionsStub.args[0][1], 'upsert'); + assert.equal(filterOptionsStub.args[0][0], unfilteredOptions); + assert.equal(filterOptionsStub.args[0][1], 'upsert'); - should.deepEqual(findOneStub.args[0][0], { + assert.deepEqual(findOneStub.args[0][0], { session_id }); - should.equal(findOneStub.args[0][1], filteredOptions); + assert.equal(findOneStub.args[0][1], filteredOptions); - should.deepEqual(addStub.args[0][0], { + assert.deepEqual(addStub.args[0][0], { session_id: filteredOptions.session_id, session_data: data.session_data, user_id: data.session_data.user_id }); - should.equal(addStub.args[0][1], filteredOptions); + assert.equal(addStub.args[0][1], filteredOptions); done(); }); }); @@ -205,24 +206,24 @@ describe('Unit: models/session', function () { const editStub = sinon.stub(models.Session, 'edit'); models.Session.upsert(data, unfilteredOptions).then(() => { - should.equal(filterOptionsStub.args[0][0], unfilteredOptions); - should.equal(filterOptionsStub.args[0][1], 'upsert'); + assert.equal(filterOptionsStub.args[0][0], unfilteredOptions); + assert.equal(filterOptionsStub.args[0][1], 'upsert'); - should.deepEqual(findOneStub.args[0][0], { + assert.deepEqual(findOneStub.args[0][0], { session_id }); - should.equal(findOneStub.args[0][1], filteredOptions); + assert.equal(findOneStub.args[0][1], filteredOptions); - should.deepEqual(editStub.args[0][0], { + assert.deepEqual(editStub.args[0][0], { session_data: data.session_data }); - should.deepEqual(editStub.args[0][1], { + assert.deepEqual(editStub.args[0][1], { session_id, id: model.id }); - should.equal(editStub.args[0][1], filteredOptions); + assert.equal(editStub.args[0][1], filteredOptions); done(); }); }); diff --git a/ghost/core/test/unit/server/models/settings.test.js b/ghost/core/test/unit/server/models/settings.test.js index 1022c9b843c..1191de66035 100644 --- a/ghost/core/test/unit/server/models/settings.test.js +++ b/ghost/core/test/unit/server/models/settings.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const mockDb = require('mock-knex'); @@ -85,22 +86,22 @@ describe('Unit: models/settings', function () { const setting = models.Settings.forge(); let returns = setting.formatOnWrite({key: 'cover_image', value: 'http://127.0.0.1:2369/cover_image.png', type: 'string'}); - should.equal(returns.value, '__GHOST_URL__/cover_image.png'); + assert.equal(returns.value, '__GHOST_URL__/cover_image.png'); returns = setting.formatOnWrite({key: 'logo', value: 'http://127.0.0.1:2369/logo.png', type: 'string'}); - should.equal(returns.value, '__GHOST_URL__/logo.png'); + assert.equal(returns.value, '__GHOST_URL__/logo.png'); returns = setting.formatOnWrite({key: 'icon', value: 'http://127.0.0.1:2369/icon.png', type: 'string'}); - should.equal(returns.value, '__GHOST_URL__/icon.png'); + assert.equal(returns.value, '__GHOST_URL__/icon.png'); returns = setting.formatOnWrite({key: 'portal_button_icon', value: 'http://127.0.0.1:2369/portal_button_icon.png', type: 'string'}); - should.equal(returns.value, '__GHOST_URL__/portal_button_icon.png'); + assert.equal(returns.value, '__GHOST_URL__/portal_button_icon.png'); returns = setting.formatOnWrite({key: 'og_image', value: 'http://127.0.0.1:2369/og_image.png', type: 'string'}); - should.equal(returns.value, '__GHOST_URL__/og_image.png'); + assert.equal(returns.value, '__GHOST_URL__/og_image.png'); returns = setting.formatOnWrite({key: 'twitter_image', value: 'http://127.0.0.1:2369/twitter_image.png', type: 'string'}); - should.equal(returns.value, '__GHOST_URL__/twitter_image.png'); + assert.equal(returns.value, '__GHOST_URL__/twitter_image.png'); }); }); @@ -109,43 +110,43 @@ describe('Unit: models/settings', function () { const setting = models.Settings.forge(); let returns = setting.parse({key: 'is_private', value: 'false', type: 'boolean'}); - should.equal(returns.value, false); + assert.equal(returns.value, false); returns = setting.parse({key: 'is_private', value: false, type: 'boolean'}); - should.equal(returns.value, false); + assert.equal(returns.value, false); returns = setting.parse({key: 'is_private', value: true, type: 'boolean'}); - should.equal(returns.value, true); + assert.equal(returns.value, true); returns = setting.parse({key: 'is_private', value: 'true', type: 'boolean'}); - should.equal(returns.value, true); + assert.equal(returns.value, true); returns = setting.parse({key: 'is_private', value: '0', type: 'boolean'}); - should.equal(returns.value, false); + assert.equal(returns.value, false); returns = setting.parse({key: 'is_private', value: '1', type: 'boolean'}); - should.equal(returns.value, true); + assert.equal(returns.value, true); returns = setting.parse({key: 'something', value: 'null'}); - should.equal(returns.value, 'null'); + assert.equal(returns.value, 'null'); returns = setting.parse({key: 'cover_image', value: '__GHOST_URL__/cover_image.png', type: 'string'}); - should.equal(returns.value, 'http://127.0.0.1:2369/cover_image.png'); + assert.equal(returns.value, 'http://127.0.0.1:2369/cover_image.png'); returns = setting.parse({key: 'logo', value: '__GHOST_URL__/logo.png', type: 'string'}); - should.equal(returns.value, 'http://127.0.0.1:2369/logo.png'); + assert.equal(returns.value, 'http://127.0.0.1:2369/logo.png'); returns = setting.parse({key: 'icon', value: '__GHOST_URL__/icon.png', type: 'string'}); - should.equal(returns.value, 'http://127.0.0.1:2369/icon.png'); + assert.equal(returns.value, 'http://127.0.0.1:2369/icon.png'); returns = setting.parse({key: 'portal_button_icon', value: '__GHOST_URL__/portal_button_icon.png', type: 'string'}); - should.equal(returns.value, 'http://127.0.0.1:2369/portal_button_icon.png'); + assert.equal(returns.value, 'http://127.0.0.1:2369/portal_button_icon.png'); returns = setting.parse({key: 'og_image', value: '__GHOST_URL__/og_image.png', type: 'string'}); - should.equal(returns.value, 'http://127.0.0.1:2369/og_image.png'); + assert.equal(returns.value, 'http://127.0.0.1:2369/og_image.png'); returns = setting.parse({key: 'twitter_image', value: '__GHOST_URL__/twitter_image.png', type: 'string'}); - should.equal(returns.value, 'http://127.0.0.1:2369/twitter_image.png'); + assert.equal(returns.value, 'http://127.0.0.1:2369/twitter_image.png'); }); }); diff --git a/ghost/core/test/unit/server/models/user.test.js b/ghost/core/test/unit/server/models/user.test.js index b8c133cf723..5ee68f99339 100644 --- a/ghost/core/test/unit/server/models/user.test.js +++ b/ghost/core/test/unit/server/models/user.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const errors = require('@tryghost/errors'); @@ -18,7 +19,7 @@ describe('Unit: models/user', function () { describe('updateLastSeen method', function () { it('exists', function () { - should.equal(typeof models.User.prototype.updateLastSeen, 'function'); + assert.equal(typeof models.User.prototype.updateLastSeen, 'function'); }); it('sets the last_seen property to new Date and returns a call to save', function () { @@ -32,11 +33,11 @@ describe('Unit: models/user', function () { const returnVal = models.User.prototype.updateLastSeen.call(instance); - should.deepEqual(instance.set.args[0][0], { + assert.deepEqual(instance.set.args[0][0], { last_seen: now }); - should.equal(returnVal, instance.save.returnValues[0]); + assert.equal(returnVal, instance.save.returnValues[0]); clock.restore(); }); @@ -561,7 +562,7 @@ describe('Unit: models/user', function () { .resolves(userToChangeContext); models.User.ownerIdCache.set('old-owner-id'); - should.equal(models.User.ownerIdCache.get(), 'old-owner-id'); + assert.equal(models.User.ownerIdCache.get(), 'old-owner-id'); const clearSpy = sinon.spy(models.User.ownerIdCache, 'clear'); @@ -577,7 +578,7 @@ describe('Unit: models/user', function () { return models.User.transferOwnership({id: userToChange.context.user}, loggedInUser) .then(() => { clearSpy.calledOnce.should.be.true(); - should.equal(models.User.ownerIdCache.get(), null); + assert.equal(models.User.ownerIdCache.get(), null); }) .finally(() => { clearSpy.restore(); @@ -635,20 +636,20 @@ describe('Unit: models/user', function () { describe('ownerIdCache', function () { it('should return null initially', function () { - should.equal(models.User.ownerIdCache.get(), null); + assert.equal(models.User.ownerIdCache.get(), null); }); it('should store and retrieve values', function () { models.User.ownerIdCache.set('abc123'); - should.equal(models.User.ownerIdCache.get(), 'abc123'); + assert.equal(models.User.ownerIdCache.get(), 'abc123'); }); it('should clear stored values', function () { models.User.ownerIdCache.set('abc123'); models.User.ownerIdCache.clear(); - should.equal(models.User.ownerIdCache.get(), null); + assert.equal(models.User.ownerIdCache.get(), null); }); }); @@ -668,7 +669,7 @@ describe('Unit: models/user', function () { return models.User.getOwnerId() .then((ownerId) => { - should.equal(ownerId, 'abc123'); + assert.equal(ownerId, 'abc123'); models.User.getOwnerUser.called.should.be.false(); }); }); @@ -682,9 +683,9 @@ describe('Unit: models/user', function () { return models.User.getOwnerId() .then((ownerId) => { - should.equal(ownerId, mockOwner.id); + assert.equal(ownerId, mockOwner.id); models.User.getOwnerUser.calledOnce.should.be.true(); - should.equal(models.User.ownerIdCache.get(), mockOwner.id); + assert.equal(models.User.ownerIdCache.get(), mockOwner.id); }); }); @@ -697,13 +698,13 @@ describe('Unit: models/user', function () { return models.User.getOwnerId() .then((ownerId) => { - should.equal(ownerId, mockOwner.id); + assert.equal(ownerId, mockOwner.id); models.User.getOwnerUser.calledOnce.should.be.true(); return models.User.getOwnerId(); }) .then((ownerId) => { - should.equal(ownerId, mockOwner.id); + assert.equal(ownerId, mockOwner.id); models.User.getOwnerUser.calledOnce.should.be.true(); }); }); diff --git a/ghost/core/test/unit/server/overrides.test.js b/ghost/core/test/unit/server/overrides.test.js index 08ff6f4017f..8f1501f6bd5 100644 --- a/ghost/core/test/unit/server/overrides.test.js +++ b/ghost/core/test/unit/server/overrides.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const luxon = require('luxon'); @@ -5,6 +6,6 @@ require('../../../core/server/overrides'); describe('Overrides', function () { it('sets global timezone to UTC', function () { - should.equal(luxon.DateTime.local().zoneName, 'UTC'); + assert.equal(luxon.DateTime.local().zoneName, 'UTC'); }); }); diff --git a/ghost/core/test/unit/server/services/adapter-manager/options-resolver.test.js b/ghost/core/test/unit/server/services/adapter-manager/options-resolver.test.js index b46ef306968..b8335625c79 100644 --- a/ghost/core/test/unit/server/services/adapter-manager/options-resolver.test.js +++ b/ghost/core/test/unit/server/services/adapter-manager/options-resolver.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const resolveAdapterOptions = require('../../../../../core/server/services/adapter-manager/options-resolver'); @@ -15,7 +16,7 @@ describe('Adapter Manager: options resolver', function () { const {adapterClassName, adapterConfig} = resolveAdapterOptions(name, adapterServiceConfig); adapterClassName.should.equal('Memory'); - should.equal(adapterConfig, undefined); + assert.equal(adapterConfig, undefined); }); it('returns default adapter configuration', function () { diff --git a/ghost/core/test/unit/server/services/auth/api-key/admin.test.js b/ghost/core/test/unit/server/services/auth/api-key/admin.test.js index ff788bbf977..10e673cfc5f 100644 --- a/ghost/core/test/unit/server/services/auth/api-key/admin.test.js +++ b/ghost/core/test/unit/server/services/auth/api-key/admin.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const errors = require('@tryghost/errors'); const jwt = require('jsonwebtoken'); const should = require('should'); @@ -127,7 +128,7 @@ describe('Admin API Key Auth', function () { apiKeyAuth.admin.authenticate(req, res, (err) => { should.exist(err); - should.equal(err instanceof errors.UnauthorizedError, true); + assert.equal(err instanceof errors.UnauthorizedError, true); err.code.should.eql('INVALID_JWT'); should.not.exist(req.api_key); done(); @@ -145,7 +146,7 @@ describe('Admin API Key Auth', function () { apiKeyAuth.admin.authenticate(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.UnauthorizedError, true); + assert.equal(err instanceof errors.UnauthorizedError, true); err.code.should.eql('INVALID_AUTH_HEADER'); should.not.exist(req.api_key); done(); @@ -163,7 +164,7 @@ describe('Admin API Key Auth', function () { apiKeyAuth.admin.authenticate(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.BadRequestError, true); + assert.equal(err instanceof errors.BadRequestError, true); err.code.should.eql('INVALID_JWT'); should.not.exist(req.api_key); done(); @@ -190,7 +191,7 @@ describe('Admin API Key Auth', function () { apiKeyAuth.admin.authenticate(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.UnauthorizedError, true); + assert.equal(err instanceof errors.UnauthorizedError, true); err.code.should.eql('UNKNOWN_ADMIN_API_KEY'); should.not.exist(req.api_key); done(); @@ -219,7 +220,7 @@ describe('Admin API Key Auth', function () { apiKeyAuth.admin.authenticate(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.UnauthorizedError, true); + assert.equal(err instanceof errors.UnauthorizedError, true); err.code.should.eql('INVALID_JWT'); err.message.should.match(/jwt expired/); should.not.exist(req.api_key); @@ -249,7 +250,7 @@ describe('Admin API Key Auth', function () { apiKeyAuth.admin.authenticate(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.UnauthorizedError, true); + assert.equal(err instanceof errors.UnauthorizedError, true); err.code.should.eql('INVALID_JWT'); err.message.should.match(/maxAge exceeded/); should.not.exist(req.api_key); @@ -279,7 +280,7 @@ describe('Admin API Key Auth', function () { apiKeyAuth.admin.authenticate(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.UnauthorizedError, true); + assert.equal(err instanceof errors.UnauthorizedError, true); err.code.should.eql('INVALID_API_KEY_TYPE'); should.not.exist(req.api_key); done(); diff --git a/ghost/core/test/unit/server/services/auth/api-key/content.test.js b/ghost/core/test/unit/server/services/auth/api-key/content.test.js index 3b1b21eb980..972992e33af 100644 --- a/ghost/core/test/unit/server/services/auth/api-key/content.test.js +++ b/ghost/core/test/unit/server/services/auth/api-key/content.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const errors = require('@tryghost/errors'); const {authenticateContentApiKey} = require('../../../../../../core/server/services/auth/api-key/content'); const models = require('../../../../../../core/server/models'); @@ -52,7 +53,7 @@ describe('Content API Key Auth', function () { authenticateContentApiKey(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.UnauthorizedError, true); + assert.equal(err instanceof errors.UnauthorizedError, true); err.code.should.eql('UNKNOWN_CONTENT_API_KEY'); should.not.exist(req.api_key); done(); @@ -71,7 +72,7 @@ describe('Content API Key Auth', function () { authenticateContentApiKey(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.UnauthorizedError, true); + assert.equal(err instanceof errors.UnauthorizedError, true); err.code.should.eql('INVALID_API_KEY_TYPE'); should.not.exist(req.api_key); done(); @@ -88,7 +89,7 @@ describe('Content API Key Auth', function () { authenticateContentApiKey(req, res, function next(err) { should.exist(err); - should.equal(err instanceof errors.BadRequestError, true); + assert.equal(err instanceof errors.BadRequestError, true); err.code.should.eql('INVALID_REQUEST'); should.not.exist(req.api_key); done(); diff --git a/ghost/core/test/unit/server/services/auth/members/index.test.js b/ghost/core/test/unit/server/services/auth/members/index.test.js index 971c4351282..f68319de445 100644 --- a/ghost/core/test/unit/server/services/auth/members/index.test.js +++ b/ghost/core/test/unit/server/services/auth/members/index.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const jwt = require('jsonwebtoken'); const should = require('should'); const {UnauthorizedError} = require('@tryghost/errors'); @@ -7,7 +8,7 @@ describe('Auth Service - Members', function () { it('exports an authenticateMembersToken method', function () { const actual = typeof members.authenticateMembersToken; const expected = 'function'; - should.equal(actual, expected); + assert.equal(actual, expected); }); describe('authenticateMembersToken', function () { @@ -20,7 +21,7 @@ describe('Auth Service - Members', function () { const actual = err; const expected = undefined; - should.equal(actual, expected); + assert.equal(actual, expected); }); }); @@ -33,7 +34,7 @@ describe('Auth Service - Members', function () { const actual = err; const expected = undefined; - should.equal(actual, expected); + assert.equal(actual, expected); }); }); describe('attempts to verify the credentials as a JWT, not allowing the "NONE" algorithm', function () { @@ -46,7 +47,7 @@ describe('Auth Service - Members', function () { const actual = err instanceof UnauthorizedError; const expected = true; - should.equal(actual, expected); + assert.equal(actual, expected); }); }); it('calls next with an error if the token is using the "none" algorithm', function () { @@ -65,7 +66,7 @@ describe('Auth Service - Members', function () { const actual = err instanceof UnauthorizedError; const expected = true; - should.equal(actual, expected); + assert.equal(actual, expected); }); }); }); diff --git a/ghost/core/test/unit/server/services/auth/session/middleware.test.js b/ghost/core/test/unit/server/services/auth/session/middleware.test.js index bfe06440c3b..6d6d0d075c4 100644 --- a/ghost/core/test/unit/server/services/auth/session/middleware.test.js +++ b/ghost/core/test/unit/server/services/auth/session/middleware.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const sessionMiddleware = require('../../../../../../core/server/services/auth').session; const SessionMiddlware = require('../../../../../../core/server/services/auth/session/middleware'); const models = require('../../../../../../core/server/models'); @@ -44,7 +45,7 @@ describe('Session Service', function () { sinon.stub(res, 'sendStatus') .callsFake(function () { - should.equal(req.session.origin, 'http://ghost.org'); + assert.equal(req.session.origin, 'http://ghost.org'); done(); }); @@ -64,11 +65,11 @@ describe('Session Service', function () { sinon.stub(res, 'sendStatus') .callsFake(function (statusCode) { - should.equal(req.session.user_id, 23); - should.equal(req.session.origin, 'http://host.tld'); - should.equal(req.session.user_agent, 'bububang'); - should.equal(req.session.ip, '127.0.0.1'); - should.equal(statusCode, 201); + assert.equal(req.session.user_id, 23); + assert.equal(req.session.origin, 'http://host.tld'); + assert.equal(req.session.user_agent, 'bububang'); + assert.equal(req.session.ip, '127.0.0.1'); + assert.equal(statusCode, 201); done(); }); @@ -105,9 +106,9 @@ describe('Session Service', function () { }); await middleware.createSession(req, res, next); - should.equal(next.callCount, 1); - should.equal(next.args[0][0].statusCode, 403); - should.equal(next.args[0][0].code, '2FA_NEW_DEVICE_DETECTED'); + assert.equal(next.callCount, 1); + assert.equal(next.args[0][0].statusCode, 403); + assert.equal(next.args[0][0].code, '2FA_NEW_DEVICE_DETECTED'); }); it('errors with a 403 when require_email_mfa is true', async function () { @@ -141,9 +142,9 @@ describe('Session Service', function () { }); await middleware.createSession(req, res, next); - should.equal(next.callCount, 1); - should.equal(next.args[0][0].statusCode, 403); - should.equal(next.args[0][0].code, '2FA_TOKEN_REQUIRED'); + assert.equal(next.callCount, 1); + assert.equal(next.args[0][0].statusCode, 403); + assert.equal(next.args[0][0].code, '2FA_TOKEN_REQUIRED'); }); }); @@ -160,7 +161,7 @@ describe('Session Service', function () { }); middleware.logout(req, res, function next(err) { - should.equal(err.errorType, 'InternalServerError'); + assert.equal(err.errorType, 'InternalServerError'); done(); }); }); @@ -170,7 +171,7 @@ describe('Session Service', function () { const res = fakeRes(); sinon.stub(res, 'sendStatus') .callsFake(function (status) { - should.equal(status, 204); + assert.equal(status, 204); done(); }); @@ -203,10 +204,10 @@ describe('Session Service', function () { await middleware.sendAuthCode(req, res, nextStub); - should.equal(sendAuthCodeToUserStub.callCount, 1); - should.equal(nextStub.callCount, 0); - should.equal(sendStatusStub.callCount, 1); - should.equal(sendStatusStub.args[0][0], 200); + assert.equal(sendAuthCodeToUserStub.callCount, 1); + assert.equal(nextStub.callCount, 0); + assert.equal(sendStatusStub.callCount, 1); + assert.equal(sendStatusStub.args[0][0], 200); }); it('calls next with an error if sendAuthCodeToUser fails', async function () { @@ -225,9 +226,9 @@ describe('Session Service', function () { await middleware.sendAuthCode(req, res, nextStub); - should.equal(sendAuthCodeToUserStub.callCount, 1); - should.equal(nextStub.callCount, 1); - should.equal(sendStatusStub.callCount, 0); + assert.equal(sendAuthCodeToUserStub.callCount, 1); + assert.equal(nextStub.callCount, 1); + assert.equal(sendStatusStub.callCount, 0); }); }); @@ -249,10 +250,10 @@ describe('Session Service', function () { await middleware.verifyAuthCode(req, res, nextStub); - should.equal(verifyAuthCodeForUserStub.callCount, 1); - should.equal(nextStub.callCount, 0); - should.equal(sendStatusStub.callCount, 1); - should.equal(sendStatusStub.args[0][0], 200); + assert.equal(verifyAuthCodeForUserStub.callCount, 1); + assert.equal(nextStub.callCount, 0); + assert.equal(sendStatusStub.callCount, 1); + assert.equal(sendStatusStub.args[0][0], 200); }); it('returns 401 if the auth code is invalid', async function () { @@ -271,10 +272,10 @@ describe('Session Service', function () { await middleware.verifyAuthCode(req, res, nextStub); - should.equal(verifyAuthCodeForUserStub.callCount, 1); - should.equal(nextStub.callCount, 0); - should.equal(sendStatusStub.callCount, 1); - should.equal(sendStatusStub.args[0][0], 401); + assert.equal(verifyAuthCodeForUserStub.callCount, 1); + assert.equal(nextStub.callCount, 0); + assert.equal(sendStatusStub.callCount, 1); + assert.equal(sendStatusStub.args[0][0], 401); }); it('calls next with an error if sendAuthCodeToUser fails', async function () { @@ -293,9 +294,9 @@ describe('Session Service', function () { await middleware.verifyAuthCode(req, res, nextStub); - should.equal(verifyAuthCodeForUserStub.callCount, 1); - should.equal(nextStub.callCount, 1); - should.equal(sendStatusStub.callCount, 0); + assert.equal(verifyAuthCodeForUserStub.callCount, 1); + assert.equal(nextStub.callCount, 1); + assert.equal(sendStatusStub.callCount, 0); }); }); }); diff --git a/ghost/core/test/unit/server/services/auth/session/session-service.test.js b/ghost/core/test/unit/server/services/auth/session/session-service.test.js index 9cfd1c05cee..93a91d687ff 100644 --- a/ghost/core/test/unit/server/services/auth/session/session-service.test.js +++ b/ghost/core/test/unit/server/services/auth/session/session-service.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const express = require('express'); @@ -55,19 +56,19 @@ describe('SessionService', function () { await sessionService.createSessionForUser(req, res, user); - should.equal(req.session.user_id, 'egg'); + assert.equal(req.session.user_id, 'egg'); const actualUser = await sessionService.getUserForSession(req, res); should.ok(findUserById.calledWith(sinon.match({id: 'egg'}))); const expectedUser = await findUserById.returnValues[0]; - should.equal(actualUser, expectedUser); + assert.equal(actualUser, expectedUser); await sessionService.removeUserForSession(req, res); - should.equal(req.session.user_id, undefined); + assert.equal(req.session.user_id, undefined); const removedUser = await sessionService.getUserForSession(req, res); - should.equal(removedUser, null); + assert.equal(removedUser, null); }); it('Throws an error when the csrf verification fails', async function () { @@ -190,19 +191,19 @@ describe('SessionService', function () { const user = {id: 'egg'}; await sessionService.createSessionForUser(req, res, user); - should.equal(req.session.user_id, 'egg'); - should.equal(req.session.verified, undefined); + assert.equal(req.session.user_id, 'egg'); + assert.equal(req.session.verified, undefined); await sessionService.verifySession(req, res); - should.equal(req.session.verified, true); + assert.equal(req.session.verified, true); await sessionService.removeUserForSession(req, res); - should.equal(req.session.user_id, undefined); - should.equal(req.session.verified, true); + assert.equal(req.session.user_id, undefined); + assert.equal(req.session.verified, true); await sessionService.createSessionForUser(req, res, user); - should.equal(req.session.user_id, 'egg'); - should.equal(req.session.verified, true); + assert.equal(req.session.user_id, 'egg'); + assert.equal(req.session.verified, true); }); it('#createSessionForUser verifies session when valid token is provided on request', async function () { @@ -254,8 +255,8 @@ describe('SessionService', function () { req.body = {token: validToken}; await sessionService.createSessionForUser(req, res, user); - should.equal(req.session.user_id, 'egg'); - should.equal(req.session.verified, true); + assert.equal(req.session.user_id, 'egg'); + assert.equal(req.session.verified, true); }); it('#createSessionForUser does not verify session when invalid token is provided on request', async function () { @@ -302,8 +303,8 @@ describe('SessionService', function () { req.body = {token: '000000'}; await sessionService.createSessionForUser(req, res, user); - should.equal(req.session.user_id, 'egg'); - should.equal(req.session.verified, undefined); + assert.equal(req.session.user_id, 'egg'); + assert.equal(req.session.verified, undefined); }); it('Generates a valid auth code and verifies it correctly', async function () { @@ -352,7 +353,7 @@ describe('SessionService', function () { // Verify the auth code const isValid = await sessionService.verifyAuthCodeForUser(req, res); - should.equal(isValid, true); + assert.equal(isValid, true); }); it('Fails to verify an incorrect auth code', async function () { @@ -401,7 +402,7 @@ describe('SessionService', function () { // Verify an incorrect auth code const isValid = await sessionService.verifyAuthCodeForUser(req, res); - should.equal(isValid, false); + assert.equal(isValid, false); }); it('Generates a different auth code for a different secret', async function () { @@ -503,7 +504,7 @@ describe('SessionService', function () { should.ok(mailer.send.calledOnce); const emailArgs = mailer.send.firstCall.args[0]; - should.equal(emailArgs.to, 'test@example.com'); + assert.equal(emailArgs.to, 'test@example.com'); emailArgs.subject.should.match(/Ghost sign in verification code/); }); @@ -595,8 +596,8 @@ describe('SessionService', function () { await sessionService.createVerifiedSessionForUser(req, res, user); - should.equal(req.session.user_id, 'egg'); - should.equal(req.session.verified, true); + assert.equal(req.session.user_id, 'egg'); + assert.equal(req.session.verified, true); }); it('Throws if the user id is invalid', async function () { @@ -686,19 +687,19 @@ describe('SessionService', function () { const user = {id: 'egg'}; await sessionService.createSessionForUser(req, res, user); - should.equal(req.session.user_id, 'egg'); - should.equal(req.session.verified, undefined); + assert.equal(req.session.user_id, 'egg'); + assert.equal(req.session.verified, undefined); await sessionService.verifySession(req, res); - should.equal(req.session.verified, true); + assert.equal(req.session.verified, true); await sessionService.removeUserForSession(req, res); - should.equal(req.session.user_id, undefined); - should.equal(req.session.verified, undefined); + assert.equal(req.session.user_id, undefined); + assert.equal(req.session.verified, undefined); await sessionService.createSessionForUser(req, res, user); - should.equal(req.session.user_id, 'egg'); - should.equal(req.session.verified, undefined); + assert.equal(req.session.user_id, 'egg'); + assert.equal(req.session.verified, undefined); }); describe('isVerificationRequired', function () { @@ -710,7 +711,7 @@ describe('SessionService', function () { }); const result = sessionService.isVerificationRequired(); - should.equal(result, true); + assert.equal(result, true); }); it('returns false when require_email_mfa is false', async function () { @@ -721,7 +722,7 @@ describe('SessionService', function () { }); const result = sessionService.isVerificationRequired(); - should.equal(result, false); + assert.equal(result, false); }); it('returns false when require_email_mfa is not set', async function () { @@ -732,7 +733,7 @@ describe('SessionService', function () { }); const result = sessionService.isVerificationRequired(); - should.equal(result, false); + assert.equal(result, false); }); }); }); diff --git a/ghost/core/test/unit/server/services/auth/session/store.test.js b/ghost/core/test/unit/server/services/auth/session/store.test.js index 70987060bf7..fee84ca9530 100644 --- a/ghost/core/test/unit/server/services/auth/session/store.test.js +++ b/ghost/core/test/unit/server/services/auth/session/store.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const SessionStore = require('../../../../../../core/server/services/auth/session/session-store'); const models = require('../../../../../../core/server/models'); const EventEmitter = require('events'); @@ -16,12 +17,12 @@ describe('Auth Service SessionStore', function () { describe('inheritance', function () { it('Is an instance of EventEmitter', function () { const store = new SessionStore(); - should.equal(store instanceof EventEmitter, true); + assert.equal(store instanceof EventEmitter, true); }); it('Is an instance of Store', function () { const store = new SessionStore(); - should.equal(store instanceof Store, true); + assert.equal(store instanceof Store, true); }); }); @@ -34,7 +35,7 @@ describe('Auth Service SessionStore', function () { const sid = 1; store.destroy(sid, function () { const destroyStubCall = destroyStub.getCall(0); - should.equal(destroyStubCall.args[0].session_id, sid); + assert.equal(destroyStubCall.args[0].session_id, sid); done(); }); }); @@ -46,7 +47,7 @@ describe('Auth Service SessionStore', function () { const store = new SessionStore(models.Session); const sid = 1; store.destroy(sid, function (err) { - should.equal(err, null); + assert.equal(err, null); done(); }); }); @@ -59,7 +60,7 @@ describe('Auth Service SessionStore', function () { const store = new SessionStore(models.Session); const sid = 1; store.destroy(sid, function (err) { - should.equal(err, error); + assert.equal(err, error); done(); }); }); @@ -74,7 +75,7 @@ describe('Auth Service SessionStore', function () { const sid = 1; store.get(sid, function () { const findOneStubCall = findOneStub.getCall(0); - should.equal(findOneStubCall.args[0].session_id, sid); + assert.equal(findOneStubCall.args[0].session_id, sid); done(); }); }); @@ -86,8 +87,8 @@ describe('Auth Service SessionStore', function () { const store = new SessionStore(models.Session); const sid = 1; store.get(sid, function (err, session) { - should.equal(err, null); - should.equal(session, null); + assert.equal(err, null); + assert.equal(session, null); done(); }); }); @@ -104,8 +105,8 @@ describe('Auth Service SessionStore', function () { const store = new SessionStore(models.Session); const sid = 1; store.get(sid, function (err, session) { - should.equal(err, null); - should.deepEqual(session, { + assert.equal(err, null); + assert.deepEqual(session, { ice: 'cube' }); done(); @@ -120,7 +121,7 @@ describe('Auth Service SessionStore', function () { const store = new SessionStore(models.Session); const sid = 1; store.get(sid, function (err) { - should.equal(err, error); + assert.equal(err, error); done(); }); }); @@ -136,8 +137,8 @@ describe('Auth Service SessionStore', function () { const session_data = {user_id: 100}; store.set(sid, session_data, function () { const upsertStubCall = upsertStub.getCall(0); - should.equal(upsertStubCall.args[0].session_data, session_data); - should.equal(upsertStubCall.args[1].session_id, sid); + assert.equal(upsertStubCall.args[0].session_data, session_data); + assert.equal(upsertStubCall.args[1].session_id, sid); done(); }); }); @@ -151,7 +152,7 @@ describe('Auth Service SessionStore', function () { const sid = 1; const session_data = {user_id: 100}; store.set(sid, session_data, function (err) { - should.equal(err, error); + assert.equal(err, error); done(); }); }); @@ -164,8 +165,8 @@ describe('Auth Service SessionStore', function () { const sid = 1; const session_data = {user_id: 100}; store.set(sid, session_data, function (err, data) { - should.equal(err, null); - should.equal(data, null); + assert.equal(err, null); + assert.equal(data, undefined); done(); }); }); diff --git a/ghost/core/test/unit/server/services/lib/dynamic-redirect-manager.test.js b/ghost/core/test/unit/server/services/lib/dynamic-redirect-manager.test.js index 8e5c042a99d..cae599263c0 100644 --- a/ghost/core/test/unit/server/services/lib/dynamic-redirect-manager.test.js +++ b/ghost/core/test/unit/server/services/lib/dynamic-redirect-manager.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const DynamicRedirectManager = require('../../../../../core/server/services/lib/dynamic-redirect-manager'); @@ -56,9 +57,9 @@ describe('DynamicRedirectManager', function () { should.fail(true, false, 'next should NOT have been called'); }); - should.equal(headers['Cache-Control'], 'public, max-age=100'); - should.equal(status, 301); - should.equal(location, '/result?q=abc&lang=js'); + assert.equal(headers['Cache-Control'], 'public, max-age=100'); + assert.equal(status, 301); + assert.equal(location, '/result?q=abc&lang=js'); }); it('Allows redirects to be removed', function () { @@ -71,9 +72,9 @@ describe('DynamicRedirectManager', function () { should.ok(true, 'next should have been called'); }); - should.equal(headers, null); - should.equal(status, null); - should.equal(location, null); + assert.equal(headers, null); + assert.equal(status, null); + assert.equal(location, null); }); it('Can add same redirect multiple times and remove it once', function () { @@ -87,9 +88,9 @@ describe('DynamicRedirectManager', function () { should.ok(true, 'next should have been called'); }); - should.equal(headers, null); - should.equal(status, null); - should.equal(location, null); + assert.equal(headers, null); + assert.equal(status, null); + assert.equal(location, null); }); it('The routing works when passed an invalid regexp for the from parameter', function () { @@ -106,9 +107,9 @@ describe('DynamicRedirectManager', function () { should.ok(true, 'next should have been called'); }); - should.equal(headers, null); - should.equal(status, null); - should.equal(location, null); + assert.equal(headers, null); + assert.equal(status, null); + assert.equal(location, null); }); it('Throws an error if unexpected internal component throws unknown error', function () { @@ -158,9 +159,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, '/a-nice-blog-post'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, '/a-nice-blog-post'); }); it('Works with substitution redirect case and a trailing slash', function (){ @@ -176,9 +177,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, '/a-nice-blog-post'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, '/a-nice-blog-post'); }); it('Redirects keeping the query params for substitution regexp', function (){ @@ -194,9 +195,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, '/a-nice-blog-post?a=b'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, '/a-nice-blog-post?a=b'); }); it('Redirects keeping the query params', function (){ @@ -212,9 +213,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, '/?something=good'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, '/?something=good'); }); }); @@ -232,9 +233,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, '/redirected-insensitive'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, '/redirected-insensitive'); }); it('with case sensitive', function () { @@ -250,9 +251,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, '/redirected-sensitive'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, '/redirected-sensitive'); }); it('defaults to case sensitive', function () { @@ -267,9 +268,9 @@ describe('DynamicRedirectManager', function () { should.fail(true, 'next should NOT have been called'); }); - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, '/redirected-default'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, '/redirected-default'); }); it('should not redirect with case sensitive', function () { @@ -284,9 +285,9 @@ describe('DynamicRedirectManager', function () { should.ok(true, 'next should have been called'); }); - should.equal(headers, null); - should.equal(status, null); - should.equal(location, null); + assert.equal(headers, null); + assert.equal(status, null); + assert.equal(location, null); }); it('should not redirect with default case sensitive', function () { @@ -301,9 +302,9 @@ describe('DynamicRedirectManager', function () { should.ok(true, 'next should have been called'); }); - should.equal(headers, null); - should.equal(status, null); - should.equal(location, null); + assert.equal(headers, null); + assert.equal(status, null); + assert.equal(location, null); }); }); @@ -321,9 +322,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, 'https://ghost.org/'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, 'https://ghost.org/'); }); it('without trailing slash', function () { @@ -339,9 +340,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, 'https://ghost.org/'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, 'https://ghost.org/'); }); it('with capturing group', function () { @@ -357,9 +358,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, 'https://ghost.org/docs'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, 'https://ghost.org/docs'); }); }); @@ -377,9 +378,9 @@ describe('DynamicRedirectManager', function () { }); // NOTE: max-age is "0" because it's not a permanent redirect - should.equal(headers['Cache-Control'], 'public, max-age=0'); - should.equal(status, 302); - should.equal(location, '/joloonii-angilal/а-ангилал'); + assert.equal(headers['Cache-Control'], 'public, max-age=0'); + assert.equal(status, 302); + assert.equal(location, '/joloonii-angilal/а-ангилал'); }); }); }); @@ -408,9 +409,9 @@ describe('DynamicRedirectManager', function () { should.fail(true, 'next should NOT have been called'); }); - should.equal(headers['Cache-Control'], 'public, max-age=100'); - should.equal(status, 301); - should.equal(location, '/blog/revamped-url/'); + assert.equal(headers['Cache-Control'], 'public, max-age=100'); + assert.equal(status, 301); + assert.equal(location, '/blog/revamped-url/'); }); }); }); diff --git a/ghost/core/test/unit/server/services/members/importer/members-csv-importer.test.js b/ghost/core/test/unit/server/services/members/importer/members-csv-importer.test.js index b314c11a412..7ecb92bc535 100644 --- a/ghost/core/test/unit/server/services/members/importer/members-csv-importer.test.js +++ b/ghost/core/test/unit/server/services/members/importer/members-csv-importer.test.js @@ -124,7 +124,7 @@ describe('MembersCSVImporter', function () { result.meta.stats.imported.should.equal(2); should.exist(result.meta.stats.invalid); - should.equal(result.meta.import_label, null); + assert.equal(result.meta.import_label, null); should.exist(result.meta.originalImportSize); result.meta.originalImportSize.should.equal(2); @@ -173,7 +173,7 @@ describe('MembersCSVImporter', function () { result.meta.stats.imported.should.equal(2); should.exist(result.meta.stats.invalid); - should.deepEqual(result.meta.import_label, internalLabel); + assert.deepEqual(result.meta.import_label, internalLabel); should.exist(result.meta.originalImportSize); result.meta.originalImportSize.should.equal(2); @@ -183,42 +183,42 @@ describe('MembersCSVImporter', function () { // member records get inserted membersRepositoryStub.create.calledTwice.should.be.true(); - should.equal(membersRepositoryStub.create.args[0][1].context.import, true, 'inserts are done in the "import" context'); - - should.deepEqual(Object.keys(membersRepositoryStub.create.args[0][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.create.args[0][0].id, undefined, 'id field should not be taken from the user input'); - should.equal(membersRepositoryStub.create.args[0][0].email, 'member_complimentary_test@example.com'); - should.equal(membersRepositoryStub.create.args[0][0].name, 'bobby tables'); - should.equal(membersRepositoryStub.create.args[0][0].note, 'a note'); - should.equal(membersRepositoryStub.create.args[0][0].subscribed, true); - should.equal(membersRepositoryStub.create.args[0][0].created_at, '2022-10-18T06:34:08.000Z'); - should.equal(membersRepositoryStub.create.args[0][0].deleted_at, undefined, 'deleted_at field should not be taken from the user input'); - should.deepEqual(membersRepositoryStub.create.args[0][0].labels, [{ + assert.equal(membersRepositoryStub.create.args[0][1].context.import, true, 'inserts are done in the "import" context'); + + assert.deepEqual(Object.keys(membersRepositoryStub.create.args[0][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.create.args[0][0].id, undefined, 'id field should not be taken from the user input'); + assert.equal(membersRepositoryStub.create.args[0][0].email, 'member_complimentary_test@example.com'); + assert.equal(membersRepositoryStub.create.args[0][0].name, 'bobby tables'); + assert.equal(membersRepositoryStub.create.args[0][0].note, 'a note'); + assert.equal(membersRepositoryStub.create.args[0][0].subscribed, true); + assert.equal(membersRepositoryStub.create.args[0][0].created_at, '2022-10-18T06:34:08.000Z'); + assert.equal(membersRepositoryStub.create.args[0][0].deleted_at, undefined, 'deleted_at field should not be taken from the user input'); + assert.deepEqual(membersRepositoryStub.create.args[0][0].labels, [{ name: 'user import label' }]); - should.deepEqual(Object.keys(membersRepositoryStub.create.args[1][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.create.args[1][0].id, undefined, 'id field should not be taken from the user input'); - should.equal(membersRepositoryStub.create.args[1][0].email, 'member_stripe_test@example.com'); - should.equal(membersRepositoryStub.create.args[1][0].name, 'stirpey beaver'); - should.equal(membersRepositoryStub.create.args[1][0].note, 'testing notes'); - should.equal(membersRepositoryStub.create.args[1][0].subscribed, false); - should.equal(membersRepositoryStub.create.args[1][0].created_at, '2022-10-18T07:31:57.000Z'); - should.equal(membersRepositoryStub.create.args[1][0].deleted_at, undefined, 'deleted_at field should not be taken from the user input'); - should.deepEqual(membersRepositoryStub.create.args[1][0].labels, [], 'no labels should be assigned'); + assert.deepEqual(Object.keys(membersRepositoryStub.create.args[1][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.create.args[1][0].id, undefined, 'id field should not be taken from the user input'); + assert.equal(membersRepositoryStub.create.args[1][0].email, 'member_stripe_test@example.com'); + assert.equal(membersRepositoryStub.create.args[1][0].name, 'stirpey beaver'); + assert.equal(membersRepositoryStub.create.args[1][0].note, 'testing notes'); + assert.equal(membersRepositoryStub.create.args[1][0].subscribed, false); + assert.equal(membersRepositoryStub.create.args[1][0].created_at, '2022-10-18T07:31:57.000Z'); + assert.equal(membersRepositoryStub.create.args[1][0].deleted_at, undefined, 'deleted_at field should not be taken from the user input'); + assert.deepEqual(membersRepositoryStub.create.args[1][0].labels, [], 'no labels should be assigned'); // stripe customer import membersRepositoryStub.linkStripeCustomer.calledOnce.should.be.true(); - should.equal(membersRepositoryStub.linkStripeCustomer.args[0][0].customer_id, 'cus_MdR9tqW6bAreiq'); - should.equal(membersRepositoryStub.linkStripeCustomer.args[0][0].member_id, 'test_member_id'); - should.equal(membersRepositoryStub.linkStripeCustomer.args[0][1].context.importer, true, 'linkStripeCustomer is called with importer context to prevent welcome emails'); + assert.equal(membersRepositoryStub.linkStripeCustomer.args[0][0].customer_id, 'cus_MdR9tqW6bAreiq'); + assert.equal(membersRepositoryStub.linkStripeCustomer.args[0][0].member_id, 'test_member_id'); + assert.equal(membersRepositoryStub.linkStripeCustomer.args[0][1].context.importer, true, 'linkStripeCustomer is called with importer context to prevent welcome emails'); // complimentary_plan import membersRepositoryStub.update.calledOnce.should.be.true(); - should.deepEqual(membersRepositoryStub.update.args[0][0].products, [{ + assert.deepEqual(membersRepositoryStub.update.args[0][0].products, [{ id: defaultTierId.toString() }]); - should.deepEqual(membersRepositoryStub.update.args[0][1].id, 'test_member_id'); + assert.deepEqual(membersRepositoryStub.update.args[0][1].id, 'test_member_id'); }); it('should subscribe or unsubscribe members as per the `subscribe_to_emails` column', async function () { @@ -319,7 +319,7 @@ describe('MembersCSVImporter', function () { result.meta.stats.imported.should.equal(5); should.exist(result.meta.stats.invalid); - should.deepEqual(result.meta.import_label, internalLabel); + assert.deepEqual(result.meta.import_label, internalLabel); should.exist(result.meta.originalImportSize); result.meta.originalImportSize.should.equal(15); @@ -327,114 +327,114 @@ describe('MembersCSVImporter', function () { fsWriteSpy.calledOnce.should.be.true(); // member records get inserted - should.equal(membersRepositoryStub.create.callCount, 5); + assert.equal(membersRepositoryStub.create.callCount, 5); - should.equal(membersRepositoryStub.create.args[0][1].context.import, true, 'inserts are done in the "import" context'); + assert.equal(membersRepositoryStub.create.args[0][1].context.import, true, 'inserts are done in the "import" context'); // CASE 1: Existing member with at least one newsletter subscription, `subscribed_to_emails` column is true // Member's newsletter subscriptions should not change - should.deepEqual(Object.keys(membersRepositoryStub.update.args[0][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels', 'newsletters']); - should.equal(membersRepositoryStub.update.args[0][0].email, 'member_subscribed_true@example.com'); - should.equal(membersRepositoryStub.update.args[0][0].subscribed, true); - should.deepEqual(membersRepositoryStub.update.args[0][0].newsletters, defaultNewsletters); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[0][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels', 'newsletters']); + assert.equal(membersRepositoryStub.update.args[0][0].email, 'member_subscribed_true@example.com'); + assert.equal(membersRepositoryStub.update.args[0][0].subscribed, true); + assert.deepEqual(membersRepositoryStub.update.args[0][0].newsletters, defaultNewsletters); // CASE 2: Existing member with at least one newsletter subscription, `subscribed_to_emails` column is false // Member's newsletter subscriptions should be removed - should.deepEqual(Object.keys(membersRepositoryStub.update.args[1][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.update.args[1][0].email, 'member_subscribed_false@example.com'); - should.equal(membersRepositoryStub.update.args[1][0].subscribed, false); - should.equal(membersRepositoryStub.update.args[1][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[1][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.update.args[1][0].email, 'member_subscribed_false@example.com'); + assert.equal(membersRepositoryStub.update.args[1][0].subscribed, false); + assert.equal(membersRepositoryStub.update.args[1][0].newsletters, undefined); // CASE 3: Existing member with at least one newsletter subscription, `subscribed_to_emails` column is NULL // Member's newsletter subscriptions should not change - should.deepEqual(Object.keys(membersRepositoryStub.update.args[2][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels', 'newsletters']); - should.equal(membersRepositoryStub.update.args[2][0].email, 'member_subscribed_null@example.com'); - should.equal(membersRepositoryStub.update.args[2][0].subscribed, true); - should.deepEqual(membersRepositoryStub.update.args[2][0].newsletters, defaultNewsletters); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[2][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels', 'newsletters']); + assert.equal(membersRepositoryStub.update.args[2][0].email, 'member_subscribed_null@example.com'); + assert.equal(membersRepositoryStub.update.args[2][0].subscribed, true); + assert.deepEqual(membersRepositoryStub.update.args[2][0].newsletters, defaultNewsletters); // CASE 4: Existing member with at least one newsletter subscription, `subscribed_to_emails` column is empty // Member's newsletter subscriptions should not change - should.deepEqual(Object.keys(membersRepositoryStub.update.args[3][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels', 'newsletters']); - should.equal(membersRepositoryStub.update.args[3][0].email, 'member_subscribed_empty@example.com'); - should.equal(membersRepositoryStub.update.args[3][0].subscribed, true); - should.deepEqual(membersRepositoryStub.update.args[3][0].newsletters, defaultNewsletters); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[3][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels', 'newsletters']); + assert.equal(membersRepositoryStub.update.args[3][0].email, 'member_subscribed_empty@example.com'); + assert.equal(membersRepositoryStub.update.args[3][0].subscribed, true); + assert.deepEqual(membersRepositoryStub.update.args[3][0].newsletters, defaultNewsletters); // CASE 5: Existing member with at least one newsletter subscription, `subscribed_to_emails` column is invalid // Member's newsletter subscriptions should not change - should.deepEqual(Object.keys(membersRepositoryStub.update.args[4][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels', 'newsletters']); - should.equal(membersRepositoryStub.update.args[4][0].email, 'member_subscribed_invalid@example.com'); - should.equal(membersRepositoryStub.update.args[4][0].subscribed, true); - should.deepEqual(membersRepositoryStub.update.args[4][0].newsletters, defaultNewsletters); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[4][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels', 'newsletters']); + assert.equal(membersRepositoryStub.update.args[4][0].email, 'member_subscribed_invalid@example.com'); + assert.equal(membersRepositoryStub.update.args[4][0].subscribed, true); + assert.deepEqual(membersRepositoryStub.update.args[4][0].newsletters, defaultNewsletters); // CASE 6: Existing member with no newsletter subscriptions, `subscribed_to_emails` column is true // Member should remain unsubscribed and not added to any newsletters - should.deepEqual(Object.keys(membersRepositoryStub.update.args[5][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.update.args[5][0].email, 'member_not_subscribed_true@example.com'); - should.equal(membersRepositoryStub.update.args[5][0].subscribed, false); - should.equal(membersRepositoryStub.update.args[5][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[5][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.update.args[5][0].email, 'member_not_subscribed_true@example.com'); + assert.equal(membersRepositoryStub.update.args[5][0].subscribed, false); + assert.equal(membersRepositoryStub.update.args[5][0].newsletters, undefined); // CASE 7: Existing member with no newsletter subscriptions, `subscribed_to_emails` column is false // Member should remain unsubscribed and not added to any newsletters - should.deepEqual(Object.keys(membersRepositoryStub.update.args[6][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.update.args[6][0].email, 'member_not_subscribed_false@example.com'); - should.equal(membersRepositoryStub.update.args[6][0].subscribed, false); - should.equal(membersRepositoryStub.update.args[6][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[6][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.update.args[6][0].email, 'member_not_subscribed_false@example.com'); + assert.equal(membersRepositoryStub.update.args[6][0].subscribed, false); + assert.equal(membersRepositoryStub.update.args[6][0].newsletters, undefined); // CASE 8: Existing member with no newsletter subscriptions, `subscribed_to_emails` column is NULL // Member should remain unsubscribed and not added to any newsletters - should.deepEqual(Object.keys(membersRepositoryStub.update.args[7][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.update.args[7][0].email, 'member_not_subscribed_null@example.com'); - should.equal(membersRepositoryStub.update.args[7][0].subscribed, false); - should.equal(membersRepositoryStub.update.args[7][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[7][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.update.args[7][0].email, 'member_not_subscribed_null@example.com'); + assert.equal(membersRepositoryStub.update.args[7][0].subscribed, false); + assert.equal(membersRepositoryStub.update.args[7][0].newsletters, undefined); // CASE 9: Existing member with no newsletter subscriptions, `subscribed_to_emails` column is empty // Member should remain unsubscribed and not added to any newsletters - should.deepEqual(Object.keys(membersRepositoryStub.update.args[8][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.update.args[8][0].email, 'member_not_subscribed_empty@example.com'); - should.equal(membersRepositoryStub.update.args[8][0].subscribed, false); - should.equal(membersRepositoryStub.update.args[8][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[8][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.update.args[8][0].email, 'member_not_subscribed_empty@example.com'); + assert.equal(membersRepositoryStub.update.args[8][0].subscribed, false); + assert.equal(membersRepositoryStub.update.args[8][0].newsletters, undefined); // CASE 10: Existing member with no newsletter subscriptions, `subscribed_to_emails` column is invalid // Member should remain unsubscribed and not added to any newsletters - should.deepEqual(Object.keys(membersRepositoryStub.update.args[9][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.update.args[9][0].email, 'member_not_subscribed_invalid@example.com'); - should.equal(membersRepositoryStub.update.args[9][0].subscribed, false); - should.equal(membersRepositoryStub.update.args[9][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.update.args[9][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.update.args[9][0].email, 'member_not_subscribed_invalid@example.com'); + assert.equal(membersRepositoryStub.update.args[9][0].subscribed, false); + assert.equal(membersRepositoryStub.update.args[9][0].newsletters, undefined); // CASE 11: New member, `subscribed_to_emails` column is true // Member should be created and subscribed - should.deepEqual(Object.keys(membersRepositoryStub.create.args[0][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.create.args[0][0].email, 'new_member_true@example.com'); - should.equal(membersRepositoryStub.create.args[0][0].subscribed, true); - should.equal(membersRepositoryStub.create.args[0][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.create.args[0][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.create.args[0][0].email, 'new_member_true@example.com'); + assert.equal(membersRepositoryStub.create.args[0][0].subscribed, true); + assert.equal(membersRepositoryStub.create.args[0][0].newsletters, undefined); // CASE 12: New member, `subscribed_to_emails` column is false // Member should be created but not subscribed - should.deepEqual(Object.keys(membersRepositoryStub.create.args[1][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.create.args[1][0].email, 'new_member_false@example.com'); - should.equal(membersRepositoryStub.create.args[1][0].subscribed, false); - should.equal(membersRepositoryStub.create.args[1][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.create.args[1][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.create.args[1][0].email, 'new_member_false@example.com'); + assert.equal(membersRepositoryStub.create.args[1][0].subscribed, false); + assert.equal(membersRepositoryStub.create.args[1][0].newsletters, undefined); // CASE 13: New member, `subscribed_to_emails` column is NULL // Member should be created but not subscribed - should.deepEqual(Object.keys(membersRepositoryStub.create.args[2][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.create.args[2][0].email, 'new_member_null@example.com'); - should.equal(membersRepositoryStub.create.args[2][0].subscribed, true); - should.equal(membersRepositoryStub.create.args[2][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.create.args[2][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.create.args[2][0].email, 'new_member_null@example.com'); + assert.equal(membersRepositoryStub.create.args[2][0].subscribed, true); + assert.equal(membersRepositoryStub.create.args[2][0].newsletters, undefined); // CASE 14: New member, `subscribed_to_emails` column is empty // Member should be created but not subscribed - should.deepEqual(Object.keys(membersRepositoryStub.create.args[3][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.create.args[3][0].email, 'new_member_empty@example.com'); - should.equal(membersRepositoryStub.create.args[3][0].subscribed, true); - should.equal(membersRepositoryStub.create.args[3][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.create.args[3][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.create.args[3][0].email, 'new_member_empty@example.com'); + assert.equal(membersRepositoryStub.create.args[3][0].subscribed, true); + assert.equal(membersRepositoryStub.create.args[3][0].newsletters, undefined); // CASE 15: New member, `subscribed_to_emails` column is invalid // Member should be created but not subscribed - should.deepEqual(Object.keys(membersRepositoryStub.create.args[4][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); - should.equal(membersRepositoryStub.create.args[4][0].email, 'new_member_invalid@example.com'); - should.equal(membersRepositoryStub.create.args[4][0].subscribed, true); - should.equal(membersRepositoryStub.create.args[4][0].newsletters, undefined); + assert.deepEqual(Object.keys(membersRepositoryStub.create.args[4][0]), ['email', 'name', 'note', 'subscribed', 'created_at', 'labels']); + assert.equal(membersRepositoryStub.create.args[4][0].email, 'new_member_invalid@example.com'); + assert.equal(membersRepositoryStub.create.args[4][0].subscribed, true); + assert.equal(membersRepositoryStub.create.args[4][0].newsletters, undefined); }); }); @@ -478,7 +478,7 @@ describe('MembersCSVImporter', function () { result.batches.should.equal(2); should.exist(result.metadata); - should.equal(result.metadata.hasStripeData, false); + assert.equal(result.metadata.hasStripeData, false); fsWriteSpy.calledOnce.should.be.true(); }); @@ -508,7 +508,7 @@ describe('MembersCSVImporter', function () { const result = await membersImporter.prepare(`${csvPath}/member-csv-export.csv`); should.exist(result.metadata); - should.equal(result.metadata.hasStripeData, true); + assert.equal(result.metadata.hasStripeData, true); }); }); @@ -571,7 +571,7 @@ describe('MembersCSVImporter', function () { const result = await importer.perform(`${csvPath}/auto-stripe-customer-id.csv`); - should.equal(membersRepositoryStub.linkStripeCustomer.args[0][0].customer_id, 'cus_mock_123456'); + assert.equal(membersRepositoryStub.linkStripeCustomer.args[0][0].customer_id, 'cus_mock_123456'); assert.equal(result.total, 1); assert.equal(result.imported, 1); diff --git a/ghost/core/test/unit/server/services/members/members-api/services/geolocation-service.test.js b/ghost/core/test/unit/server/services/members/members-api/services/geolocation-service.test.js index de23f20933f..38a10a00010 100644 --- a/ghost/core/test/unit/server/services/members/members-api/services/geolocation-service.test.js +++ b/ghost/core/test/unit/server/services/members/members-api/services/geolocation-service.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const nock = require('nock'); const should = require('should'); const GeolocationService = require('../../../../../../../core/server/services/members/members-api/services/geolocation-service'); @@ -57,22 +58,22 @@ describe('lib/geolocation', function () { let scope = nock('https://get.geojs.io').get('/v1/ip/geo/.json').reply(200, {test: true}); let result = await service.getGeolocationFromIP(''); scope.isDone().should.eql(false); - should.equal(undefined, result); + assert.equal(undefined, result); scope = nock('https://get.geojs.io').get('/v1/ip/geo/null.json').reply(200, {test: true}); result = await service.getGeolocationFromIP(null); scope.isDone().should.eql(false); - should.equal(undefined, result); + assert.equal(undefined, result); scope = nock('https://get.geojs.io').get('/v1/ip/geo/undefined.json').reply(200, {test: true}); result = await service.getGeolocationFromIP(undefined); scope.isDone().should.eql(false); - should.equal(undefined, result); + assert.equal(undefined, result); scope = nock('https://get.geojs.io').get('/v1/ip/geo/test.json').reply(200, {test: true}); result = await service.getGeolocationFromIP('test'); scope.isDone().should.eql(false); - should.equal(undefined, result); + assert.equal(undefined, result); }); }); }); diff --git a/ghost/core/test/unit/server/services/members/stripe-connect.test.js b/ghost/core/test/unit/server/services/members/stripe-connect.test.js index 7a846c422f1..b50725ec892 100644 --- a/ghost/core/test/unit/server/services/members/stripe-connect.test.js +++ b/ghost/core/test/unit/server/services/members/stripe-connect.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const stripeConnect = require('../../../../../core/server/services/members/stripe-connect'); @@ -13,12 +14,12 @@ describe('Members - Stripe Connect', function () { should.exist(session.get(stripeConnect.STATE_PROP), 'The session should have a state set'); - should.equal(url.origin, 'https://connect.stripe.com'); - should.equal(url.pathname, '/oauth/authorize'); + assert.equal(url.origin, 'https://connect.stripe.com'); + assert.equal(url.pathname, '/oauth/authorize'); - should.equal(url.searchParams.get('response_type'), 'code'); - should.equal(url.searchParams.get('scope'), 'read_write'); - should.equal(url.searchParams.get('state'), session.get(stripeConnect.STATE_PROP)); + assert.equal(url.searchParams.get('response_type'), 'code'); + assert.equal(url.searchParams.get('scope'), 'read_write'); + assert.equal(url.searchParams.get('state'), session.get(stripeConnect.STATE_PROP)); }); it('getStripeConnectTokenData returns token data when the state is correct', async function () { @@ -35,9 +36,9 @@ describe('Members - Stripe Connect', function () { const tokenData = await stripeConnect.getStripeConnectTokenData(encodedData, getSessionProp); - should.equal(tokenData.public_key, data.p); - should.equal(tokenData.secret_key, data.a); - should.equal(tokenData.livemode, data.l); + assert.equal(tokenData.public_key, data.p); + assert.equal(tokenData.secret_key, data.a); + assert.equal(tokenData.livemode, data.l); }); it('getStripeConnectTokenData throws when the state is incorrect', async function () { diff --git a/ghost/core/test/unit/server/services/offers/application/unique-checker.test.js b/ghost/core/test/unit/server/services/offers/application/unique-checker.test.js index 26ecf243080..bc73fbc6ecf 100644 --- a/ghost/core/test/unit/server/services/offers/application/unique-checker.test.js +++ b/ghost/core/test/unit/server/services/offers/application/unique-checker.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const sinon = require('sinon'); const should = require('should'); const UniqueChecker = require('../../../../../../core/server/services/offers/application/unique-checker'); @@ -14,7 +15,7 @@ describe('UniqueChecker', function () { const returnVal = await checker.isUniqueCode('code'); - should.equal(returnVal, true); + assert.equal(returnVal, true); }); it('Returns false if there is an Offer found in the repository', async function () { @@ -27,7 +28,7 @@ describe('UniqueChecker', function () { const returnVal = await checker.isUniqueCode('code'); - should.equal(returnVal, false); + assert.equal(returnVal, false); }); }); @@ -42,7 +43,7 @@ describe('UniqueChecker', function () { const returnVal = await checker.isUniqueName('name'); - should.equal(returnVal, true); + assert.equal(returnVal, true); }); it('Returns false if there is an Offer found in the repository', async function () { @@ -55,7 +56,7 @@ describe('UniqueChecker', function () { const returnVal = await checker.isUniqueName('name'); - should.equal(returnVal, false); + assert.equal(returnVal, false); }); }); }); diff --git a/ghost/core/test/unit/server/services/offers/domain/models/offer-code.test.js b/ghost/core/test/unit/server/services/offers/domain/models/offer-code.test.js index 80127434443..3fca4e6445b 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/offer-code.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/offer-code.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const OfferCode = require('../../../../../../../core/server/services/offers/domain/models/offer-code'); @@ -29,19 +30,19 @@ describe('OfferCode', function () { const code = OfferCode.create('Hello, world'); - should.equal(code.value, 'hello-world'); + assert.equal(code.value, 'hello-world'); }); it('Requires the string to be a maximum of 191 characters', function () { const maxLengthInput = Array.from({length: 191}).map(() => 'a').join(''); - should.equal(maxLengthInput.length, 191); + assert.equal(maxLengthInput.length, 191); OfferCode.create(maxLengthInput); const tooLong = maxLengthInput + 'a'; - should.equal(tooLong.length, 192); + assert.equal(tooLong.length, 192); try { OfferCode.create(tooLong); diff --git a/ghost/core/test/unit/server/services/offers/domain/models/offer-currency.test.js b/ghost/core/test/unit/server/services/offers/domain/models/offer-currency.test.js index f92f518635c..2357c064d53 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/offer-currency.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/offer-currency.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const OfferCurrency = require('../../../../../../../core/server/services/offers/domain/models/offer-currency'); @@ -63,7 +64,7 @@ describe('OfferCurrency', function () { it('Store the currency as a string on the value property', function () { const currency = OfferCurrency.create('usd'); - should.equal(typeof currency.value, 'string'); + assert.equal(typeof currency.value, 'string'); }); it('Considers currencies equal if they have the same ISO code', function () { diff --git a/ghost/core/test/unit/server/services/offers/domain/models/offer-description.test.js b/ghost/core/test/unit/server/services/offers/domain/models/offer-description.test.js index 00f9f1ecb0d..858452c13fd 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/offer-description.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/offer-description.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const OfferDescription = require('../../../../../../../core/server/services/offers/domain/models/offer-description'); @@ -7,9 +8,9 @@ describe('OfferDescription', function () { it('Creates an Offer description containing a string', function () { OfferDescription.create('Hello, world'); - should.equal(OfferDescription.create().value, ''); - should.equal(OfferDescription.create(undefined).value, ''); - should.equal(OfferDescription.create(null).value, ''); + assert.equal(OfferDescription.create().value, ''); + assert.equal(OfferDescription.create(undefined).value, ''); + assert.equal(OfferDescription.create(null).value, ''); try { OfferDescription.create(12); @@ -35,13 +36,13 @@ describe('OfferDescription', function () { it('Requires the string to be a maximum of 191 characters', function () { const maxLengthInput = Array.from({length: 191}).map(() => 'a').join(''); - should.equal(maxLengthInput.length, 191); + assert.equal(maxLengthInput.length, 191); OfferDescription.create(maxLengthInput); const tooLong = maxLengthInput + 'a'; - should.equal(tooLong.length, 192); + assert.equal(tooLong.length, 192); try { OfferDescription.create(tooLong); @@ -57,7 +58,7 @@ describe('OfferDescription', function () { it('Trims the contents of the OfferDescription', function () { const description = OfferDescription.create(' Trim me! '); - should.equal(description.value, 'Trim me!'); + assert.equal(description.value, 'Trim me!'); }); }); }); diff --git a/ghost/core/test/unit/server/services/offers/domain/models/offer-name.test.js b/ghost/core/test/unit/server/services/offers/domain/models/offer-name.test.js index 56486f49e80..793513bc18e 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/offer-name.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/offer-name.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const OfferName = require('../../../../../../../core/server/services/offers/domain/models/offer-name'); @@ -51,13 +52,13 @@ describe('OfferName', function () { it('Requires the string to be a maximum of 40 characters', function () { const maxLengthInput = Array.from({length: 40}).map(() => 'a').join(''); - should.equal(maxLengthInput.length, 40); + assert.equal(maxLengthInput.length, 40); OfferName.create(maxLengthInput); const tooLong = maxLengthInput + 'a'; - should.equal(tooLong.length, 41); + assert.equal(tooLong.length, 41); try { OfferName.create(tooLong); @@ -73,7 +74,7 @@ describe('OfferName', function () { it('Trims the contents of the OfferName', function () { const description = OfferName.create(' Trim me! '); - should.equal(description.value, 'Trim me!'); + assert.equal(description.value, 'Trim me!'); }); }); }); diff --git a/ghost/core/test/unit/server/services/offers/domain/models/offer-redemption-type.test.js b/ghost/core/test/unit/server/services/offers/domain/models/offer-redemption-type.test.js index a58194ba9e9..80b9b73a5dd 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/offer-redemption-type.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/offer-redemption-type.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const OfferRedemptionType = require('../../../../../../../core/server/services/offers/domain/models/offer-redemption-type'); @@ -32,14 +33,14 @@ describe('OfferRedemptionType', function () { describe('OfferRedemptionType.Signup', function () { it('Is an OfferRedemptionType with a value of "signup"', function () { - should.equal(OfferRedemptionType.Signup.value, 'signup'); + assert.equal(OfferRedemptionType.Signup.value, 'signup'); should.ok(OfferRedemptionType.Signup.equals(OfferRedemptionType.create('signup'))); }); }); describe('OfferRedemptionType.Retention', function () { it('Is an OfferRedemptionType with a value of "retention"', function () { - should.equal(OfferRedemptionType.Retention.value, 'retention'); + assert.equal(OfferRedemptionType.Retention.value, 'retention'); should.ok(OfferRedemptionType.Retention.equals(OfferRedemptionType.create('retention'))); }); }); diff --git a/ghost/core/test/unit/server/services/offers/domain/models/offer-title.test.js b/ghost/core/test/unit/server/services/offers/domain/models/offer-title.test.js index 2dfb36229d7..66d5bb7ba01 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/offer-title.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/offer-title.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const OfferTitle = require('../../../../../../../core/server/services/offers/domain/models/offer-title'); @@ -7,9 +8,9 @@ describe('OfferTitle', function () { it('Creates an Offer description containing a string', function () { OfferTitle.create('Hello, world'); - should.equal(OfferTitle.create().value, ''); - should.equal(OfferTitle.create(undefined).value, ''); - should.equal(OfferTitle.create(null).value, ''); + assert.equal(OfferTitle.create().value, ''); + assert.equal(OfferTitle.create(undefined).value, ''); + assert.equal(OfferTitle.create(null).value, ''); try { OfferTitle.create(12); @@ -35,13 +36,13 @@ describe('OfferTitle', function () { it('Requires the string to be a maximum of 191 characters', function () { const maxLengthInput = Array.from({length: 191}).map(() => 'a').join(''); - should.equal(maxLengthInput.length, 191); + assert.equal(maxLengthInput.length, 191); OfferTitle.create(maxLengthInput); const tooLong = maxLengthInput + 'a'; - should.equal(tooLong.length, 192); + assert.equal(tooLong.length, 192); try { OfferTitle.create(tooLong); @@ -57,7 +58,7 @@ describe('OfferTitle', function () { it('Trims the contents of the OfferTitle', function () { const description = OfferTitle.create(' Trim me! '); - should.equal(description.value, 'Trim me!'); + assert.equal(description.value, 'Trim me!'); }); }); }); diff --git a/ghost/core/test/unit/server/services/offers/domain/models/offer-type.test.js b/ghost/core/test/unit/server/services/offers/domain/models/offer-type.test.js index ae979243d2c..08ae3332ee2 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/offer-type.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/offer-type.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const OfferType = require('../../../../../../../core/server/services/offers/domain/models/offer-type'); @@ -33,21 +34,21 @@ describe('OfferType', function () { describe('OfferType.Percentage', function () { it('Is an OfferType with a value of "percent"', function () { - should.equal(OfferType.Percentage.value, 'percent'); + assert.equal(OfferType.Percentage.value, 'percent'); should.ok(OfferType.Percentage.equals(OfferType.create('percent'))); }); }); describe('OfferType.Fixed', function () { it('Is an OfferType with a value of "fixed"', function () { - should.equal(OfferType.Fixed.value, 'fixed'); + assert.equal(OfferType.Fixed.value, 'fixed'); should.ok(OfferType.Fixed.equals(OfferType.create('fixed'))); }); }); describe('OfferType.Trial', function () { it('Is an OfferType with a value of "trial"', function () { - should.equal(OfferType.Trial.value, 'trial'); + assert.equal(OfferType.Trial.value, 'trial'); should.ok(OfferType.Trial.equals(OfferType.create('trial'))); }); }); diff --git a/ghost/core/test/unit/server/services/offers/domain/models/offer.test.js b/ghost/core/test/unit/server/services/offers/domain/models/offer.test.js index 3d014d4c0be..ad499737c66 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/offer.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/offer.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const ObjectID = require('bson-objectid').default; const errors = require('../../../../../../../core/server/services/offers/domain/errors'); @@ -208,7 +209,7 @@ describe('Offer', function () { const offer = await Offer.create(data, mockUniqueChecker); - should.equal(offer.currency, null); + assert.equal(offer.currency, null); }); it('Has a currency of null if the type is trial', async function () { @@ -229,7 +230,7 @@ describe('Offer', function () { const offer = await Offer.create(data, mockUniqueChecker); - should.equal(offer.currency, null); + assert.equal(offer.currency, null); }); it('Can handle ObjectID, string and no id', async function () { @@ -297,7 +298,7 @@ describe('Offer', function () { const offer = await Offer.create(data, mockUniqueChecker); - should.equal(typeof offer.createdAt, 'string'); + assert.equal(typeof offer.createdAt, 'string'); }); }); @@ -447,14 +448,14 @@ describe('Offer', function () { const offer = await Offer.createFromStripeCoupon(stripeCoupon, 'month', tier, mockUniqueChecker); should.ok(offer instanceof Offer); - should.equal(offer.code.value, 'stripe_coupon_abc'); - should.equal(offer.status.value, 'archived'); - should.equal(offer.stripeCouponId, 'stripe_coupon_abc'); - should.equal(offer.type.value, 'percent'); - should.equal(offer.amount.value, 25); - should.equal(offer.name.value, '25% off forever (stripe_coupon_abc)'); - should.equal(offer.displayTitle.value, '25% off forever (stripe_coupon_abc)'); - should.equal(offer.displayDescription.value, ''); + assert.equal(offer.code.value, 'stripe_coupon_abc'); + assert.equal(offer.status.value, 'archived'); + assert.equal(offer.stripeCouponId, 'stripe_coupon_abc'); + assert.equal(offer.type.value, 'percent'); + assert.equal(offer.amount.value, 25); + assert.equal(offer.name.value, '25% off forever (stripe_coupon_abc)'); + assert.equal(offer.displayTitle.value, '25% off forever (stripe_coupon_abc)'); + assert.equal(offer.displayDescription.value, ''); }); it('Creates a valid fixed amount offer from a Stripe coupon', async function () { @@ -473,13 +474,13 @@ describe('Offer', function () { const offer = await Offer.createFromStripeCoupon(stripeCoupon, 'year', tier, mockUniqueChecker); should.ok(offer instanceof Offer); - should.equal(offer.code.value, 'fixed_coupon_xyz'); - should.equal(offer.status.value, 'archived'); - should.equal(offer.stripeCouponId, 'fixed_coupon_xyz'); - should.equal(offer.type.value, 'fixed'); - should.equal(offer.amount.value, 1000); - should.equal(offer.currency.value, 'USD'); - should.equal(offer.name.value, 'USD 10 off once (fixed_coupon_xyz)'); + assert.equal(offer.code.value, 'fixed_coupon_xyz'); + assert.equal(offer.status.value, 'archived'); + assert.equal(offer.stripeCouponId, 'fixed_coupon_xyz'); + assert.equal(offer.type.value, 'fixed'); + assert.equal(offer.amount.value, 1000); + assert.equal(offer.currency.value, 'USD'); + assert.equal(offer.name.value, 'USD 10 off once (fixed_coupon_xyz)'); }); it('Generates correct name for repeating duration with months', async function () { @@ -497,9 +498,9 @@ describe('Offer', function () { const offer = await Offer.createFromStripeCoupon(stripeCoupon, 'month', tier, mockUniqueChecker); - should.equal(offer.name.value, '15% off for 6 months (SUMMER25)'); - should.equal(offer.code.value, 'summer25'); - should.equal(offer.status.value, 'archived'); + assert.equal(offer.name.value, '15% off for 6 months (SUMMER25)'); + assert.equal(offer.code.value, 'summer25'); + assert.equal(offer.status.value, 'archived'); }); it('Generates correct name for percent off with "once" duration', async function () { @@ -516,7 +517,7 @@ describe('Offer', function () { const offer = await Offer.createFromStripeCoupon(stripeCoupon, 'month', tier, mockUniqueChecker); - should.equal(offer.name.value, '10% off once (WELCOME10)'); + assert.equal(offer.name.value, '10% off once (WELCOME10)'); }); it('Generates correct name for fixed amount with "forever" duration', async function () { @@ -534,7 +535,7 @@ describe('Offer', function () { const offer = await Offer.createFromStripeCoupon(stripeCoupon, 'year', tier, mockUniqueChecker); - should.equal(offer.name.value, 'EUR 5 off forever (FLAT5OFF)'); + assert.equal(offer.name.value, 'EUR 5 off forever (FLAT5OFF)'); }); it('Generates correct name for fixed amount with repeating duration', async function () { @@ -553,7 +554,7 @@ describe('Offer', function () { const offer = await Offer.createFromStripeCoupon(stripeCoupon, 'month', tier, mockUniqueChecker); - should.equal(offer.name.value, 'GBP 2.5 off for 3 months (SAVE3MONTHS)'); + assert.equal(offer.name.value, 'GBP 2.5 off for 3 months (SAVE3MONTHS)'); }); it('Sets cadence correctly from parameter', async function () { @@ -569,7 +570,7 @@ describe('Offer', function () { }; const monthlyOffer = await Offer.createFromStripeCoupon(stripeCoupon, 'month', tier, mockUniqueChecker); - should.equal(monthlyOffer.cadence.value, 'month'); + assert.equal(monthlyOffer.cadence.value, 'month'); const yearlyOffer = await Offer.createFromStripeCoupon( {...stripeCoupon, id: 'yearly_coupon'}, @@ -577,7 +578,7 @@ describe('Offer', function () { tier, mockUniqueChecker ); - should.equal(yearlyOffer.cadence.value, 'year'); + assert.equal(yearlyOffer.cadence.value, 'year'); }); it('Associates offer with provided tier', async function () { @@ -595,8 +596,8 @@ describe('Offer', function () { const offer = await Offer.createFromStripeCoupon(stripeCoupon, 'month', tier, mockUniqueChecker); - should.equal(offer.tier.id, tierId.toHexString()); - should.equal(offer.tier.name, 'Premium'); + assert.equal(offer.tier.id, tierId.toHexString()); + assert.equal(offer.tier.name, 'Premium'); }); it('Is marked as a new offer', async function () { @@ -613,7 +614,7 @@ describe('Offer', function () { const offer = await Offer.createFromStripeCoupon(stripeCoupon, 'month', tier, mockUniqueChecker); - should.equal(offer.isNew, true); + assert.equal(offer.isNew, true); }); }); }); diff --git a/ghost/core/test/unit/server/services/offers/domain/models/stripe-coupon.test.js b/ghost/core/test/unit/server/services/offers/domain/models/stripe-coupon.test.js index e99860ed1d1..6ceeed196d2 100644 --- a/ghost/core/test/unit/server/services/offers/domain/models/stripe-coupon.test.js +++ b/ghost/core/test/unit/server/services/offers/domain/models/stripe-coupon.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const StripeCoupon = require('../../../../../../../core/server/services/offers/domain/models/stripe-coupon'); @@ -11,10 +12,10 @@ describe('StripeCoupon', function () { }); should.ok(coupon instanceof StripeCoupon); - should.equal(coupon.id, 'coupon_123'); - should.equal(coupon.percent_off, 20); - should.equal(coupon.duration, 'forever'); - should.equal(coupon.amount_off, undefined); + assert.equal(coupon.id, 'coupon_123'); + assert.equal(coupon.percent_off, 20); + assert.equal(coupon.duration, 'forever'); + assert.equal(coupon.amount_off, undefined); }); it('Creates a valid StripeCoupon with amount_off', function () { @@ -26,11 +27,11 @@ describe('StripeCoupon', function () { }); should.ok(coupon instanceof StripeCoupon); - should.equal(coupon.id, 'coupon_456'); - should.equal(coupon.amount_off, 500); - should.equal(coupon.currency, 'usd'); - should.equal(coupon.duration, 'once'); - should.equal(coupon.percent_off, undefined); + assert.equal(coupon.id, 'coupon_456'); + assert.equal(coupon.amount_off, 500); + assert.equal(coupon.currency, 'usd'); + assert.equal(coupon.duration, 'once'); + assert.equal(coupon.percent_off, undefined); }); it('Creates a valid StripeCoupon with repeating duration', function () { @@ -42,8 +43,8 @@ describe('StripeCoupon', function () { }); should.ok(coupon instanceof StripeCoupon); - should.equal(coupon.duration, 'repeating'); - should.equal(coupon.duration_in_months, 3); + assert.equal(coupon.duration, 'repeating'); + assert.equal(coupon.duration_in_months, 3); }); it('Throws if coupon is null or undefined', function () { diff --git a/ghost/core/test/unit/server/services/settings-helpers/settings-helpers.test.js b/ghost/core/test/unit/server/services/settings-helpers/settings-helpers.test.js index 92c97249403..79d7634389d 100644 --- a/ghost/core/test/unit/server/services/settings-helpers/settings-helpers.test.js +++ b/ghost/core/test/unit/server/services/settings-helpers/settings-helpers.test.js @@ -63,8 +63,8 @@ describe('Settings Helpers', function () { const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils: {}, labs: {}, limitService}); const keys = settingsHelpers.getActiveStripeKeys(); - should.equal(keys.publicKey, 'direct_publishable'); - should.equal(keys.secretKey, 'direct_secret'); + assert.equal(keys.publicKey, 'direct_publishable'); + assert.equal(keys.secretKey, 'direct_secret'); }); it('Does not use connect keys if stripeDirect is true, and the direct keys do not exist', function () { @@ -75,7 +75,7 @@ describe('Settings Helpers', function () { const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils: {}, labs: {}, limitService}); const keys = settingsHelpers.getActiveStripeKeys(); - should.equal(keys, null); + assert.equal(keys, null); }); it('Uses connect keys when stripeDirect is false, and the connect keys exist', function () { @@ -86,8 +86,8 @@ describe('Settings Helpers', function () { const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils: {}, labs: {}, limitService}); const keys = settingsHelpers.getActiveStripeKeys(); - should.equal(keys.publicKey, 'connect_publishable'); - should.equal(keys.secretKey, 'connect_secret'); + assert.equal(keys.publicKey, 'connect_publishable'); + assert.equal(keys.secretKey, 'connect_secret'); }); it('Uses direct keys when stripeDirect is false, but the connect keys do not exist', function () { @@ -98,8 +98,8 @@ describe('Settings Helpers', function () { const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils: {}, labs: {}, limitService}); const keys = settingsHelpers.getActiveStripeKeys(); - should.equal(keys.publicKey, 'direct_publishable'); - should.equal(keys.secretKey, 'direct_secret'); + assert.equal(keys.publicKey, 'direct_publishable'); + assert.equal(keys.secretKey, 'direct_secret'); }); }); @@ -108,7 +108,7 @@ describe('Settings Helpers', function () { const fakeSettings = createSettingsMock({setDirect: true, setConnect: true}); const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils: {}, labs: {}, limitService}); const key = settingsHelpers.getMembersValidationKey(); - should.equal(key, 'validation_key'); + assert.equal(key, 'validation_key'); }); }); @@ -132,25 +132,25 @@ describe('Settings Helpers', function () { it('returns a generic unsubscribe url when no uuid is provided', function () { const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils, labs: {}, limitService}); const url = settingsHelpers.createUnsubscribeUrl(null); - should.equal(url, 'http://domain.com/unsubscribe/?preview=1'); + assert.equal(url, 'http://domain.com/unsubscribe/?preview=1'); }); it('returns a url that can be used to unsubscribe a member', function () { const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils, labs: {}, limitService}); const url = settingsHelpers.createUnsubscribeUrl(memberUuid); - should.equal(url, `http://domain.com/unsubscribe/?uuid=memberuuid&key=${memberUuidHash}`); + assert.equal(url, `http://domain.com/unsubscribe/?uuid=memberuuid&key=${memberUuidHash}`); }); it('returns a url that can be used to unsubscribe a member for a given newsletter', function () { const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils, labs: {}, limitService}); const url = settingsHelpers.createUnsubscribeUrl(memberUuid, {newsletterUuid}); - should.equal(url, `http://domain.com/unsubscribe/?uuid=memberuuid&key=${memberUuidHash}&newsletter=newsletteruuid`); + assert.equal(url, `http://domain.com/unsubscribe/?uuid=memberuuid&key=${memberUuidHash}&newsletter=newsletteruuid`); }); it('returns a url that can be used to unsubscribe a member from comments', function () { const settingsHelpers = new SettingsHelpers({settingsCache: fakeSettings, config: configUtils.config, urlUtils, labs: {}, limitService}); const url = settingsHelpers.createUnsubscribeUrl(memberUuid, {comments: true}); - should.equal(url, `http://domain.com/unsubscribe/?uuid=memberuuid&key=${memberUuidHash}&comments=1`); + assert.equal(url, `http://domain.com/unsubscribe/?uuid=memberuuid&key=${memberUuidHash}&comments=1`); }); }); diff --git a/ghost/core/test/unit/server/services/stats/utils/tinybird.test.js b/ghost/core/test/unit/server/services/stats/utils/tinybird.test.js index 1d8e0e9bfc3..b31928d24fd 100644 --- a/ghost/core/test/unit/server/services/stats/utils/tinybird.test.js +++ b/ghost/core/test/unit/server/services/stats/utils/tinybird.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const sinon = require('sinon'); const should = require('should'); const tinybird = require('../../../../../../core/server/services/stats/utils/tinybird'); @@ -191,7 +192,7 @@ describe('Tinybird Client', function () { }; const result = tinybirdClient.parseResponse(mockResponse); - should.equal(result, null); + assert.equal(result, null); }); }); @@ -230,7 +231,7 @@ describe('Tinybird Client', function () { const result = await tinybirdClient.fetch('test_pipe', {}); - should.equal(result, null); + assert.equal(result, null); mockRequest.get.calledOnce.should.be.true(); }); @@ -242,7 +243,7 @@ describe('Tinybird Client', function () { const result = await tinybirdClient.fetch('test_pipe', {}); - should.equal(result, null); + assert.equal(result, null); mockRequest.get.calledOnce.should.be.true(); }); }); diff --git a/ghost/core/test/unit/server/services/stripe/config.test.js b/ghost/core/test/unit/server/services/stripe/config.test.js index 9755a73b530..360a56d1a4f 100644 --- a/ghost/core/test/unit/server/services/stripe/config.test.js +++ b/ghost/core/test/unit/server/services/stripe/config.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const UrlUtils = require('@tryghost/url-utils'); @@ -48,7 +49,7 @@ describe('Stripe - config', function () { }; const config = getConfig({settingsHelpers, config: configUtils.config, urlUtils: {}}); - should.equal(config, null); + assert.equal(config, null); }); it('Includes the subdirectory in the webhookHandlerUrl', function () { @@ -60,9 +61,9 @@ describe('Stripe - config', function () { const config = getConfig({settingsHelpers, config: configUtils.config, urlUtils: fakeUrlUtils}); - should.equal(config.secretKey, 'direct_secret'); - should.equal(config.publicKey, 'direct_publishable'); - should.equal(config.webhookHandlerUrl, 'http://site.com/subdir/members/webhooks/stripe/'); + assert.equal(config.secretKey, 'direct_secret'); + assert.equal(config.publicKey, 'direct_publishable'); + assert.equal(config.webhookHandlerUrl, 'http://site.com/subdir/members/webhooks/stripe/'); should.exist(config.checkoutSessionSuccessUrl); should.exist(config.checkoutSessionCancelUrl); diff --git a/ghost/core/test/unit/server/services/stripe/stripe-api.test.js b/ghost/core/test/unit/server/services/stripe/stripe-api.test.js index 7f39cc14be1..d73e54dd165 100644 --- a/ghost/core/test/unit/server/services/stripe/stripe-api.test.js +++ b/ghost/core/test/unit/server/services/stripe/stripe-api.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const sinon = require('sinon'); const should = require('should'); const rewire = require('rewire'); @@ -46,14 +47,14 @@ describe('StripeAPI', function () { it('Sends card as payment method if labs flag not enabled', async function () { await api.createCheckoutSession('priceId', null, {}); - should.deepEqual(mockStripe.checkout.sessions.create.firstCall.firstArg.payment_method_types, ['card']); + assert.deepEqual(mockStripe.checkout.sessions.create.firstCall.firstArg.payment_method_types, ['card']); }); it('Sends no payment methods if labs flag is enabled', async function () { mockLabsIsSet.withArgs('additionalPaymentMethods').returns(true); await api.createCheckoutSession('priceId', null, {}); - should.deepEqual(mockStripe.checkout.sessions.create.firstCall.firstArg.payment_method_types, undefined); + assert.deepEqual(mockStripe.checkout.sessions.create.firstCall.firstArg.payment_method_types, undefined); }); it('sends success_url and cancel_url', async function () { @@ -70,14 +71,14 @@ describe('StripeAPI', function () { should.not.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_period_days); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_period_days, 12); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_period_days, 12); }); it('uses trial_from_plan without trialDays', async function () { await api.createCheckoutSession('priceId', null, {}); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan, true); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan, true); should.not.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_period_days); }); @@ -87,7 +88,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan, true); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan, true); should.not.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_period_days); }); @@ -97,7 +98,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan, true); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_from_plan, true); should.not.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.subscription_data.trial_period_days); }); @@ -113,7 +114,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer, 'cust_mock_123456'); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer, 'cust_mock_123456'); }); it('passes email if no customer object provided', async function () { @@ -123,7 +124,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email, 'foo@example.com'); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email, 'foo@example.com'); }); it('passes email if customer object provided w/o ID', async function () { @@ -137,7 +138,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email, 'foo@example.com'); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email, 'foo@example.com'); }); it('passes only one of customer ID and email', async function () { @@ -153,7 +154,7 @@ describe('StripeAPI', function () { should.not.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer, 'cust_mock_123456'); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer, 'cust_mock_123456'); }); it('passes attribution data to the subscription metadata if provided', async function () { @@ -238,7 +239,7 @@ describe('StripeAPI', function () { mockLabsIsSet.withArgs('additionalPaymentMethods').returns(true); await api.createCheckoutSetupSession('priceId', {currency: 'usd'}); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.currency, 'usd'); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.currency, 'usd'); }); }); @@ -263,10 +264,10 @@ describe('StripeAPI', function () { sinon.restore(); }); - it('returns null if customer exists', async function () { + it('returns undefined', async function () { const stripeCustomerId = await api.getCustomerIdByEmail(mockCustomerEmail); - should.equal(stripeCustomerId, null); + assert.equal(stripeCustomerId, undefined); }); }); @@ -295,7 +296,7 @@ describe('StripeAPI', function () { it('returns customer ID if customer exists', async function () { const stripeCustomerId = await api.getCustomerIdByEmail(mockCustomerEmail); - should.equal(stripeCustomerId, mockCustomerId); + assert.equal(stripeCustomerId, mockCustomerId); }); }); @@ -345,7 +346,7 @@ describe('StripeAPI', function () { it('returns the customer with the most recent subscription', async function () { const stripeCustomerId = await api.getCustomerIdByEmail(mockCustomerEmail); - should.equal(stripeCustomerId, 'recent_customer_id'); + assert.equal(stripeCustomerId, 'recent_customer_id'); }); }); }); @@ -374,12 +375,12 @@ describe('StripeAPI', function () { it('cancels a subscription trial', async function () { const result = await api.cancelSubscriptionTrial(mockSubscription.id); - should.equal(mockStripe.subscriptions.update.callCount, 1); + assert.equal(mockStripe.subscriptions.update.callCount, 1); - should.equal(mockStripe.subscriptions.update.args[0][0], mockSubscription.id); - should.deepEqual(mockStripe.subscriptions.update.args[0][1], {trial_end: 'now'}); + assert.equal(mockStripe.subscriptions.update.args[0][0], mockSubscription.id); + assert.deepEqual(mockStripe.subscriptions.update.args[0][1], {trial_end: 'now'}); - should.deepEqual(result, mockSubscription); + assert.deepEqual(result, mockSubscription); }); }); @@ -414,11 +415,11 @@ describe('StripeAPI', function () { it('adds a coupon to a subscription', async function () { const result = await api.addCouponToSubscription('sub_123', 'coupon_abc'); - should.equal(mockStripe.subscriptions.update.callCount, 1); - should.equal(mockStripe.subscriptions.update.args[0][0], 'sub_123'); - should.deepEqual(mockStripe.subscriptions.update.args[0][1], {coupon: 'coupon_abc'}); + assert.equal(mockStripe.subscriptions.update.callCount, 1); + assert.equal(mockStripe.subscriptions.update.args[0][0], 'sub_123'); + assert.deepEqual(mockStripe.subscriptions.update.args[0][1], {coupon: 'coupon_abc'}); - should.deepEqual(result, mockSubscription); + assert.deepEqual(result, mockSubscription); }); }); @@ -549,7 +550,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer, mockCustomerId); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer, mockCustomerId); }); it('passes customer_email when no customer object is provided', async function () { @@ -562,7 +563,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email, mockCustomerEmail); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email, mockCustomerEmail); }); it('uses only customer when both customer and customerEmail are provided', async function () { @@ -582,7 +583,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer); - should.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer, mockCustomerId); + assert.equal(mockStripe.checkout.sessions.create.firstCall.firstArg.customer, mockCustomerId); should.not.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.customer_email); }); @@ -601,7 +602,7 @@ describe('StripeAPI', function () { }); should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.metadata); - should.deepEqual(mockStripe.checkout.sessions.create.firstCall.firstArg.metadata, metadata); + assert.deepEqual(mockStripe.checkout.sessions.create.firstCall.firstArg.metadata, metadata); }); it('passes custom fields correctly', async function () { @@ -616,7 +617,7 @@ describe('StripeAPI', function () { should.exist(mockStripe.checkout.sessions.create.firstCall.firstArg.custom_fields); const customFields = mockStripe.checkout.sessions.create.firstCall.firstArg.custom_fields; - should.equal(customFields.length, 1); + assert.equal(customFields.length, 1); }); it('has correct data for custom field message', async function () { @@ -630,7 +631,7 @@ describe('StripeAPI', function () { }); const customFields = mockStripe.checkout.sessions.create.firstCall.firstArg.custom_fields; - should.deepEqual(customFields[0], { + assert.deepEqual(customFields[0], { key: 'donation_message', label: { type: 'custom', diff --git a/ghost/core/test/unit/server/services/themes/validate.test.js b/ghost/core/test/unit/server/services/themes/validate.test.js index a685595a14e..8913a3bca5b 100644 --- a/ghost/core/test/unit/server/services/themes/validate.test.js +++ b/ghost/core/test/unit/server/services/themes/validate.test.js @@ -53,7 +53,7 @@ describe('Themes', function () { formatStub.calledOnce.should.be.true(); checkedTheme.should.be.an.Object(); - should.equal(validate.canActivate(checkedTheme), true); + assert.equal(validate.canActivate(checkedTheme), true); }); }); @@ -69,7 +69,7 @@ describe('Themes', function () { formatStub.calledOnce.should.be.true(); checkedTheme.should.be.an.Object(); - should.equal(validate.canActivate(checkedTheme), true); + assert.equal(validate.canActivate(checkedTheme), true); }); }); @@ -98,7 +98,7 @@ describe('Themes', function () { checkStub.callCount.should.be.equal(0); formatStub.calledOnce.should.be.true(); - should.equal(validate.canActivate(checkedTheme), false); + assert.equal(validate.canActivate(checkedTheme), false); }); }); @@ -127,7 +127,7 @@ describe('Themes', function () { checkZipStub.callCount.should.be.equal(0); formatStub.calledOnce.should.be.true(); - should.equal(validate.canActivate(checkedTheme), false); + assert.equal(validate.canActivate(checkedTheme), false); }); }); diff --git a/ghost/core/test/unit/server/services/url/local-file-cache.test.js b/ghost/core/test/unit/server/services/url/local-file-cache.test.js index efd2233ef87..c200c654f6e 100644 --- a/ghost/core/test/unit/server/services/url/local-file-cache.test.js +++ b/ghost/core/test/unit/server/services/url/local-file-cache.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const fs = require('fs-extra'); @@ -33,7 +34,7 @@ describe('Unit: services/url/LocalFileCache', function () { const cachedUrls = await localFileCache.read('urls'); - should.equal(cachedUrls, null); + assert.equal(cachedUrls, null); }); it('returns null when the cache file is malformatted', async function () { @@ -49,7 +50,7 @@ describe('Unit: services/url/LocalFileCache', function () { const cachedUrls = await localFileCache.read('urls'); - should.equal(cachedUrls, null); + assert.equal(cachedUrls, null); }); }); @@ -81,7 +82,7 @@ describe('Unit: services/url/LocalFileCache', function () { const result = await localFileCache.write('urls', {data: 'test'}); - should.equal(result, null); + assert.equal(result, null); writeFileStub.called.should.equal(false); }); }); diff --git a/ghost/core/test/unit/server/web/api/canary/content/middleware.test.js b/ghost/core/test/unit/server/web/api/canary/content/middleware.test.js index 9169f05898e..ab3be8155e8 100644 --- a/ghost/core/test/unit/server/web/api/canary/content/middleware.test.js +++ b/ghost/core/test/unit/server/web/api/canary/content/middleware.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const middleware = require('../../../../../../../core/server/web/api/endpoints/content/middleware'); @@ -11,7 +12,7 @@ describe('Content API middleware', function () { const firstMiddleware = middleware.authenticatePublic[0]; const brute = require('../../../../../../../core/server/web/shared/middleware/brute'); - should.equal(firstMiddleware, brute.contentApiKey); + assert.equal(firstMiddleware, brute.contentApiKey); }); }); }); diff --git a/ghost/core/test/unit/server/web/api/middleware/cors.test.js b/ghost/core/test/unit/server/web/api/middleware/cors.test.js index 9097b99f84f..2a6860f4dfe 100644 --- a/ghost/core/test/unit/server/web/api/middleware/cors.test.js +++ b/ghost/core/test/unit/server/web/api/middleware/cors.test.js @@ -45,7 +45,7 @@ describe('cors', function () { cors(req, res, next); - next.called.should.be.true(); + sinon.assert.calledOnce(next); should.not.exist(res.headers['Access-Control-Allow-Origin']); done(); @@ -60,7 +60,7 @@ describe('cors', function () { cors(req, res, next); - res.end.called.should.be.true(); + sinon.assert.calledOnce(res.end); res.headers['Access-Control-Allow-Origin'].should.equal(origin); done(); @@ -75,7 +75,7 @@ describe('cors', function () { cors(req, res, next); - res.end.called.should.be.true(); + sinon.assert.calledOnce(res.end); res.headers['Access-Control-Allow-Origin'].should.equal(origin); done(); @@ -90,7 +90,7 @@ describe('cors', function () { cors(req, res, next); - next.called.should.be.true(); + sinon.assert.calledOnce(next); should.not.exist(res.headers['Access-Control-Allow-Origin']); done(); @@ -107,7 +107,7 @@ describe('cors', function () { cors(req, res, next); - res.end.called.should.be.true(); + sinon.assert.calledOnce(res.end); res.headers['Access-Control-Allow-Origin'].should.equal(origin); done(); @@ -129,7 +129,7 @@ describe('cors', function () { cors(req, res, next); - res.end.called.should.be.true(); + sinon.assert.called(res.end); res.headers['Access-Control-Allow-Origin'].should.equal(origin); done(); @@ -137,8 +137,8 @@ describe('cors', function () { it('should add origin value to the vary header', function (done) { corsCaching(req, res, function () { - should.equal(res.vary.called, true); - should.equal(res.vary.args[0], 'Origin'); + sinon.assert.calledOnce(res.vary); + sinon.assert.calledWith(res.vary, 'Origin'); done(); }); }); @@ -146,7 +146,7 @@ describe('cors', function () { it('should NOT add origin value to the vary header when not an OPTIONS request', function (done) { req.method = 'GET'; corsCaching(req, res, function () { - should.equal(res.vary.called, false); + sinon.assert.notCalled(res.vary); done(); }); }); diff --git a/ghost/core/test/unit/server/web/api/middleware/update-user-last-seen.test.js b/ghost/core/test/unit/server/web/api/middleware/update-user-last-seen.test.js index 5a2faf5999f..3b6c8010de4 100644 --- a/ghost/core/test/unit/server/web/api/middleware/update-user-last-seen.test.js +++ b/ghost/core/test/unit/server/web/api/middleware/update-user-last-seen.test.js @@ -1,3 +1,4 @@ +const assert = require('node:assert/strict'); const should = require('should'); const sinon = require('sinon'); const moment = require('moment'); @@ -10,7 +11,7 @@ describe('updateUserLastSeenMiddleware', function () { it('calls next with no error if there is no user on the request', function (done) { updateUserLastSeenMiddleware({}, {}, function next(err) { - should.equal(err, undefined); + assert.equal(err, undefined); done(); }); }); @@ -21,7 +22,7 @@ describe('updateUserLastSeenMiddleware', function () { get: sinon.stub().withArgs('last_seen').returns(fakeLastSeen) }; updateUserLastSeenMiddleware({user: fakeUser}, {}, function next(err) { - should.equal(err, undefined); + assert.equal(err, undefined); done(); }); }); @@ -34,8 +35,8 @@ describe('updateUserLastSeenMiddleware', function () { updateLastSeen: sinon.stub().resolves() }; updateUserLastSeenMiddleware({user: fakeUser}, {}, function next(err) { - should.equal(err, undefined); - should.equal(fakeUser.updateLastSeen.callCount, 1); + assert.equal(err, undefined); + assert.equal(fakeUser.updateLastSeen.callCount, 1); done(); }); }); @@ -48,8 +49,8 @@ describe('updateUserLastSeenMiddleware', function () { updateLastSeen: sinon.stub().rejects(fakeError) }; updateUserLastSeenMiddleware({user: fakeUser}, {}, function next(err) { - should.equal(err, fakeError); - should.equal(fakeUser.updateLastSeen.callCount, 1); + assert.equal(err, fakeError); + assert.equal(fakeUser.updateLastSeen.callCount, 1); done(); }); }); diff --git a/ghost/i18n/generate-context.js b/ghost/i18n/generate-context.js index 8ea0d64bb92..75ae510d8c9 100644 --- a/ghost/i18n/generate-context.js +++ b/ghost/i18n/generate-context.js @@ -24,5 +24,14 @@ const CONTEXT_FILE = './locales/context.json'; return obj; }, {}); - await fs.writeFile(CONTEXT_FILE, JSON.stringify(orderedContext, null, 4)); + const newContent = JSON.stringify(orderedContext, null, 4); + const existingContent = await fs.readFile(CONTEXT_FILE, 'utf-8'); + + if (process.env.CI && newContent !== existingContent) { + // eslint-disable-next-line no-console + console.error('context.json is out of date. Run `yarn translate` in ghost/i18n and commit the result.'); + process.exit(1); + } + + await fs.writeFile(CONTEXT_FILE, newContent); })(); diff --git a/ghost/i18n/locales/af/portal.json b/ghost/i18n/locales/af/portal.json index 9a7a81b00ae..133ae71ac40 100644 --- a/ghost/i18n/locales/af/portal.json +++ b/ghost/i18n/locales/af/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "As die spam klag per ongeluk was, of as u weer e-posse wil begin ontvang, kan u weer inskryf vir e-posse deur op die knoppie op die vorige skerm te klik.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "As u nou kanselleer, sal u toegang hê tot {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "As u 'n korporatiewe of regerings e-posrekening het, kontak u IT-afdeling en vra hulle om e-posse van {senderEmail} te ontvang", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "As u weer e-posse wil begin ontvang, is die beste volgende stap om u e-posadres op rekord te kontroleer vir enige probleme en dan weer in te skryf op die vorige skerm.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "As u nie die e-pos nuusbrief ontvang wat u op ingeteken het nie, is hier 'n paar goed om te kontroleer.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "As u al hierdie kontroles voltooi het en u steeds nie e-posse ontvang nie, kan u hulp kry deur {supportAddress} te kontak.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Benodig meer hulp? Kontak kliëntediens", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Nuusbriewe kan op u rekening afgeskakel word vir twee redes: 'n Vorige e-pos is as spam gemerk, of 'n poging om 'n e-pos te stuur het tot 'n permanente fout gelei (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Ontvang u nie e-posse nie?", "Now check your email!": "Kyk nou u e-pos!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "As u weer ingeskryf is, en u sien steeds nie e-posse in u posbus nie, kontroleer u spam vouer. Sommige posbusverskaffers hou 'n rekord van vorige spam klagtes en sal steeds e-posse merk. As dit gebeur, merk die nuutste nuusbrief as 'Not spam' om dit terug te skuif na u primêre posbus.", diff --git a/ghost/i18n/locales/ar/portal.json b/ghost/i18n/locales/ar/portal.json index 52a0441111f..e6586d5cc18 100644 --- a/ghost/i18n/locales/ar/portal.json +++ b/ghost/i18n/locales/ar/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": ".إذا كانت الشكوى من البريد المزعج غير مقصودة،أو إذا كنت ترغب في بدء تلقي الرسائل الإلكترونية مرة أخرى، يمكنك إعادة الاشتراك في الرسائل الإلكترونية بالنقر على الزر في الشاشة السابقة ", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "{periodEnd} إذا قمت بإلغاء اشتراكك الآن، ستظل لديك إمكانية الوصول حتى ", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "{senderEmail} إذا كان لديك حساب بريد إلكتروني تابع لشركة أو حكومة، تواصل مع قسم تكنولوجيا المعلومات واطلب منهم السماح بتلقي الرسائل من", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": ".إذا كنت ترغب في بدء تلقي الرسائل الإلكترونية مرة أخرى، أفضل الخطوات التالية هي التحقق من عنوان بريدك الإلكتروني المسجل لأي مشاكل ثم النقر على زر إعادة الاشتراك في الشاشة السابقة", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": ".إذا كنت لا تتلقى النشرة الإخبارية التي اشتركت فيها، إليك بعض الأمور التي يجب التحقق منها ", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": ".{supportAddress} إذا كنت قد أتممت جميع هذه الفحوصات وما زلت لا تتلقى الرسائل الإلكترونية، يمكنك التواصل للحصول على الدعم عن طريق الاتصال بـ", @@ -120,8 +121,8 @@ "Need more help? Contact support": "تحتاج إلى المزيد من المساعدة؟ اتصل بالدعم", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": ".(bounce) يمكن تعطيل النشرات الإخبارية على حسابك لسببين: تم تصنيف بريد إلكتروني سابق كرسالة غير مرغوب فيها، أو محاولة إرسال بريدإلكترونى أدى إلى فشل دائم", "Next payment": "", - "No member exists with this e-mail address.": ".لا يوجد عضو بهذا عنوان البريد الإلكتروني", - "No member exists with this e-mail address. Please sign up first.": ".لا يوجد عضو بهذا عنوان البريد الإلكتروني، يرجى التسجيل أولًا", + "No member exists with this email address.": ".لا يوجد عضو بهذا عنوان البريد الإلكتروني", + "No member exists with this email address. Please sign up first.": ".لا يوجد عضو بهذا عنوان البريد الإلكتروني، يرجى التسجيل أولًا", "Not receiving emails?": "لا تتلقى رسائل البريد الإلكتروني؟", "Now check your email!": "!الآن تحقق من بريدك الإلكتروني!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": ".بمجرد إعادة الاشتراك، إذا كنت لا تزال لا ترى الرسائل في صندوق الوارد الخاص بك تحقق من مجلد البريد المزعج. بعض مزودي الخدمة يحتفظون بسجل للشكاوى السابقة المتعلقة بالبريد المزعج وسوف يستمرون في وضع العلامات على الرسائل. إذا حدث ذلك، قم بوضع علامة على النشرة الإخبارية الأخيرة كـ (ليس بريدًا مزعجًا) لإعادتها إلى صندوق الوارد الرئيسي", diff --git a/ghost/i18n/locales/bg/portal.json b/ghost/i18n/locales/bg/portal.json index 54da5ee2614..316741f6943 100644 --- a/ghost/i18n/locales/bg/portal.json +++ b/ghost/i18n/locales/bg/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ако оплакването за спам е било случайно или искате отново да получавате имейли, може да се абонирате отново, като щракнете върху бутона на предишния екран.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ако отмените абонамента си сега, ще продължавате да имате достъп до {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ако имате корпоративен или правителствен имейл адрес, обърнете се към ИТ отдела си и ги помолете да разрешат получаването на имейли от {senderEmail}.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ако искате отново да получавате имейли, най-добре е да проверите дали няма някакви проблеми с имейл адреса ви и след това да щракнете върху повторно абониране на предишния екран.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ако не получавате имейл бюлетин, за който сте се абонирали, ето няколко неща, които може да проверите.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ако сте извършили всички тези проверки и все още не получавате имейли, може да се свържете с поддръжката на {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Още имате нужда от помощ? Потърсете поддръжката", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Бюлетините могат да бъдат деактивирани в профила ви по две причини: предишен имейл е бил маркиран като спам или опитът за изпращане на имейл е довел до траен неуспех (отказ).", "Next payment": "", - "No member exists with this e-mail address.": "Няма абонат с такъв имейл адрес.", - "No member exists with this e-mail address. Please sign up first.": "Няма абонат с такъв имейл адрес. Моля, първо се регистрирайте.", + "No member exists with this email address.": "Няма абонат с такъв имейл адрес.", + "No member exists with this email address. Please sign up first.": "Няма абонат с такъв имейл адрес. Моля, първо се регистрирайте.", "Not receiving emails?": "Не получавате поща?", "Now check your email!": "Проверете имейла си!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "След като се абонирате отново, ако все още не получавате имейли, проверете папката за спам. Някои доставчици пазят история с предишни оплаквания за спам и ще продължат да маркират имейлите. Ако вашият случай е такъв, маркирайте последния бюлетин като 'Не е спам', за да го преместите обратно в основната си папка.", diff --git a/ghost/i18n/locales/bn/portal.json b/ghost/i18n/locales/bn/portal.json index 502985b38dd..a252781b203 100644 --- a/ghost/i18n/locales/bn/portal.json +++ b/ghost/i18n/locales/bn/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "যদি স্প্যাম অভিযোগটি দুর্ঘটনাক্রমে হয়ে থাকে, অথবা আপনি আবার ইমেলগুলি পেতে শুরু করতে চান, তবে পূর্ববর্তী স্ক্রিনে বোতামটি ক্লিক করে আপনি ইমেলগুলিতে পুনঃসাবস্ক্রাইব করতে পারেন।", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "আপনি যদি এখন আপনার সাবস্ক্রিপশন বাতিল করেন, তবে {periodEnd} পর্যন্ত আপনার প্রবেশাধিকার থাকবে।", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "যদি আপনার কর্পোরেট বা সরকারি ইমেল অ্যাকাউন্ট থাকে, তবে আপনার আইটি বিভাগের সাথে যোগাযোগ করুন এবং তাদেরকে বলুন {senderEmail} থেকে ইমেলগুলি গ্রহণের অনুমতি দিতে।", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "আপনি যদি আবার ইমেল পেতে শুরু করতে চান, তবে সেরা পরবর্তী পদক্ষেপগুলি হল যে কোনো সমস্যার জন্য আপনার ফাইলে থাকা ইমেল ঠিকানাটি পরীক্ষা করা এবং তারপর পূর্ববর্তী স্ক্রিনে পুনঃসাবস্ক্রাইব ক্লিক করা।", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "আপনি যদি সাবস্ক্রাইব করা ইমেল নিউজলেটারটি না পেয়ে থাকেন, তবে এখানে কয়েকটি বিষয় পরীক্ষা করতে পারেন।", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "আপনি যদি এই সমস্ত পরীক্ষা সম্পূর্ণ করেন এবং এখনও ইমেল না পান, তবে {supportAddress} এর সাথে যোগাযোগ করে সাপোর্ট পেতে পারেন।", @@ -120,8 +121,8 @@ "Need more help? Contact support": "আরও সাহায্য প্রয়োজন? সাপোর্টের সাথে যোগাযোগ করুন", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "আপনার অ্যাকাউন্টে দুটি কারণে নিউজলেটার নিষ্ক্রিয় করা যেতে পারে: একটি পূর্ববর্তী ইমেল স্প্যাম হিসাবে চিহ্নিত করা হয়েছিল, অথবা একটি ইমেল পাঠানোর চেষ্টা স্থায়ী ব্যর্থতার (বাউন্স) ফলাফল।", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "ইমেল পাচ্ছেন না?", "Now check your email!": "এখন আপনার ইমেল চেক করুন!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "একবার পুনঃসাবস্ক্রাইব করার পর, যদি আপনি এখনও আপনার ইনবক্সে ইমেল না দেখেন, তবে আপনার স্প্যাম ফোল্ডার চেক করুন। কিছু ইনবক্স প্রোভাইডার পূর্ববর্তী স্প্যাম অভিযোগগুলির একটি রেকর্ড রাখে এবং ইমেলগুলি চিহ্নিত করতে থাকে। যদি এটি ঘটে, তাহলে সর্বশেষ নিউজলেটারটিকে 'স্প্যাম নয়' হিসাবে চিহ্নিত করুন যাতে এটি আপনার প্রাথমিক ইনবক্সে ফিরে যায়।", diff --git a/ghost/i18n/locales/bs/portal.json b/ghost/i18n/locales/bs/portal.json index 3c5cc0df22f..7a2a9f41f09 100644 --- a/ghost/i18n/locales/bs/portal.json +++ b/ghost/i18n/locales/bs/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ako je pritužba na spam bila slučajna, ili želiš ponovno početi primati Email poruke, možeš se ponovno pretplatiti klikom na dugme na prethodnoj stranici.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ako otkažeš pretplatu, nastavit ćeš imati pristup do {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ako imaš korporativni ili vladin Email, obrati se svom IT kadru i zamoli ih da dopuste primanje Email poruka s adrese {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ako želiš ponovo početi primati Email poruke, provjeri svoju Email adresu na bilo kakve probleme, a zatim se ponovo pretplati na prethodnoj stranici.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ako ne primaš Email poruke od željenog newslettera, evo nekoliko stvari koje možeš provjeriti sada.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ako i nakon gore navedenih provjera ne dobijaš Email poruke za željeni newsletter, kontaktiraj podršku: {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Treba ti dodatna pomoć? Kontaktiraj podršku", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newletteri na vašem računu se mogu onemogućiti iz dva razloga: Prethodni Email označena je kao spam ili pokušaj slanja Email poruke rezultirao je greškom (došlo je do odbacivanja nakon više neuspjelih pokušaja).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Ne primaš Email poruke?", "Now check your email!": "Provjeri svoju Email adresu!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Nakon što se ponovno pretplatite, ako još uvijek ne vidiš Email u svom inboxu, provjeri spam folder. Neki pružatelji Email usluga čuvaju zapis prethodnih pritužbi na spam i nastavit će ih označavati kao takve. Ako se to dogodi, označite najnoviji newsletter Email kao \"Nije neželjena pošta\" da biste ga vratili u primarni inbox.", diff --git a/ghost/i18n/locales/ca/portal.json b/ghost/i18n/locales/ca/portal.json index ebc24e0af00..10a55bfef96 100644 --- a/ghost/i18n/locales/ca/portal.json +++ b/ghost/i18n/locales/ca/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Si la queixa de correu brossa va ser accidental, o si vols començar a rebre correus electrònics de nou, pots tornar a subscriure't als correus electrònics fent clic al botó de la pantalla anterior.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Si cancel·les la teva subscripció ara, continuaràs tenint-hi accés fins al {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Si tens un compte de correu electrònic corporatiu o governamental, posa't en contacte amb el teu departament de TI i demana'ls-hi que permetin rebre correus electrònics de {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Si vols començar a rebre correus electrònics de nou, el millor que pots fer és comprovar si hi ha cap problema a la teva adreça de correu electrònic i, a continuació, fes clic a tornar a subscriure's a la pantalla anterior.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Si no reps el butlletí electrònic al qual t'has subscrit, aquí tens algunes coses per comprovar.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Si has completat totes aquestes comprovacions i encara no reps correus electrònics, pots contactar amb {supportAddress} per obtenir assistència.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Necessites més ajuda? Contacta amb suport tècnic", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Els butlletins de notícies poden estar desactivats al teu compte per dos motius: un correu electrònic anterior s'ha marcat com a correu brossa o bé s'ha intentat enviar un correu electrònic que ha provocat un error permanent (rebot).", "Next payment": "", - "No member exists with this e-mail address.": "No existeix cap membre amb aquesta adreça d'email", - "No member exists with this e-mail address. Please sign up first.": "No existeix cap membre amb aquesta adreça d'email. Si-us-plau, registra't abans", + "No member exists with this email address.": "No existeix cap membre amb aquesta adreça d'email", + "No member exists with this email address. Please sign up first.": "No existeix cap membre amb aquesta adreça d'email. Si-us-plau, registra't abans", "Not receiving emails?": "No reps els correus electrònics?", "Now check your email!": "Revisa ara el teu correu electrònic!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Un cop et tornis a subscriure, si encara no reps correus electrònics a la teva safata d'entrada, comprova la carpeta de correu brossa. Alguns proveïdors de correu mantenen un registre de les queixes de correu brossa anteriors i continuaran marcant els correus electrònics com a tal. Si això passa, marca el darrer butlletí com a \"No és correu brossa\". ' per tornar-lo a moure a la safata d'entrada principal.", diff --git a/ghost/i18n/locales/context.json b/ghost/i18n/locales/context.json index d8b669a5ccd..83aa2208960 100644 --- a/ghost/i18n/locales/context.json +++ b/ghost/i18n/locales/context.json @@ -136,6 +136,7 @@ "If you did not make this request, you can simply delete this message.": "Footer text in signup/login emails", "If you didn't try to sign in recently, you can safely ignore this email to deny access.": "Footer text in signup/login emails", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Footer text in signup/login emails", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "Shown when trying to sign in to an invite-only account", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Paragraph in the email suppression FAQ", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Paragraph in the email receiving FAQ", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Email receiving FAQ", @@ -169,8 +170,8 @@ "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "A paragraph in the email suppression FAQ", "Next payment": "", "No matches found": "Shown in search when 0 results", - "No member exists with this e-mail address.": "Shown when trying to sign in.", - "No member exists with this e-mail address. Please sign up first.": "Shown when trying to sign in.", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "Shown when trying to sign in.", "Not receiving emails?": "A link in portal to take members to an FAQ area about what to do if you're not receiving emails", "Now check your email!": "A confirmation message after logging in or signing up", "Oldest": "Text appears in the sorting selector for comments", @@ -178,7 +179,15 @@ "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "A paragraph in the email suppression FAQ", "One hour ago": "Time a comment was placed", "One min ago": "Time since a comment was made", + "Open AOL Mail": "", + "Open Gmail": "", + "Open Hey": "", + "Open Mail.ru": "", + "Open Outlook": "", + "Open Proton Mail": "", + "Open Yahoo Mail": "", "Open email": "", + "Open iCloud Mail": "", "Or use this link to securely sign in": "", "Or, skip the code and sign in directly": "", "Permanent failure (bounce)": "A section title in the email suppression FAQ", @@ -305,6 +314,7 @@ "Verify your email address is correct": "A section title in the email receiving FAQ", "Verifying...": "", "View comments": "Link text in comment email to view the comments", + "View in admin": "", "View in browser": "Link in the newsletter header taking the user to the website", "View plans": "A button to view available plans", "We couldn't unsubscribe you as the email address was not found. Please contact the site owner.": "An error message when an unsubscribe link is clicked, but we don't have any record of the address being unsubscribed. Probably because the email address on the account has been changed.", @@ -378,4 +388,4 @@ "{memberEmail} will no longer receive this newsletter.": "Shown when a member unsubscribes from a newsletter", "{memberEmail} will no longer receive {newsletterName} newsletter.": "Shown when a member unsubscribes from a newsletter", "{trialDays} days free": "Portal - label for a free trial that lasts a specific number of days" -} \ No newline at end of file +} diff --git a/ghost/i18n/locales/cs/portal.json b/ghost/i18n/locales/cs/portal.json index 81528880f33..11ba506f4fc 100644 --- a/ghost/i18n/locales/cs/portal.json +++ b/ghost/i18n/locales/cs/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Pokud bylo nahlášení spamu neúmyslné nebo chcete znovu začít dostávat e-maily, můžete se znovu přihlásit k odběru e-mailů kliknutím na tlačítko na předchozí obrazovce.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Pokud nyní zrušíte svůj odběr, budete mít přístup až do {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Pokud máte firemní nebo institucionální e-mailový účet, obraťte se na své IT oddělení a požádejte je, aby povolili přijímání e-mailů od {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Pokud chcete znovu začít dostávat e-maily, nejlepším dalším krokem je zkontrolovat, zda není problém s vaší e-mailovou adresou v našich záznamech, a poté kliknout na tlačítko pro opětovné přihlášení na předchozí obrazovce.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Pokud nedostáváte e-mailový newsletter, k němuž jste se přihlásili, zde je několik věcí, které můžete zkontrolovat.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Pokud jste provedli všechny tyto kontroly a stále nedostáváte e-maily, můžete požádat o podporu kontaktováním {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Potřebujete další pomoc? Kontaktujte podporu", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newslettery mohou být na vašem účtu deaktivovány ze dvou důvodů: Předchozí e-mail byl označen jako spam, nebo pokus o odeslání e-mailu skončil trvalým selháním (odrazem).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Nepřicházejí vám e-maily?", "Now check your email!": "Zkontrolujte svou e-mailovou schránku!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Po opětovném přihlášení, pokud stále nevidíte e-maily ve své schránce, zkontrolujte složku spam. Někteří poskytovatelé e-mailových schránek si uchovávají záznam o předchozích stížnostech na spam a budou nadále označovat e-maily. Pokud k tomu dojde, označte nejnovější newsletter jako 'Není spam', aby se přesunul zpět do vaší hlavní schránky.", diff --git a/ghost/i18n/locales/da/portal.json b/ghost/i18n/locales/da/portal.json index 1e3891b9626..0bae61512ba 100644 --- a/ghost/i18n/locales/da/portal.json +++ b/ghost/i18n/locales/da/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Hvis spamklagen var utilsigtet, eller du gerne vil begynde at modtage e-mails igen, kan du abonnere igen på e-mails ved at klikke på knappen på det forrige skærmbillede.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Hvis du annullere dit abonnement nu, vil du fortsat have adgang indtil {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Hvis du har en virksomheds- eller statslig e-mailkonto, skal du kontakte din it-afdeling og bede dem om at tillade, at e-mails modtages fra {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Hvis du gerne vil begynde at modtage e-mails igen, er de bedste næste trin at tjekke din registreret e-mailadresse for eventuelle problemer og derefter klikke på gentilmeld på den forrige skærmbillede.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Hvis du ikke modtager det e-mailnyhedsbrev, du har tilmeldt dig, er der et par ting, du skal tjekke.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Hvis du har gennemført alle disse checks, og du stadig ikke modtager e-mails, kan du kontakte {supportAddress} for at få hjælp.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Brug for hjælp? Kontakt support", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Nyhedsbreve kan deaktiveres på din konto af to årsager: En tidligere e-mail blev markeret som spam, eller forsøg på at sende en e-mail resulterede i en permanent fejl (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Der findes ingen medlem med denne e-mailadresse.", - "No member exists with this e-mail address. Please sign up first.": "Der findes ingen medlem med denne e-mailadresse. Du skal først tilmelde dig.", + "No member exists with this email address.": "Der findes ingen medlem med denne e-mailadresse.", + "No member exists with this email address. Please sign up first.": "Der findes ingen medlem med denne e-mailadresse. Du skal først tilmelde dig.", "Not receiving emails?": "Modtager du ikke e-mails?", "Now check your email!": "Tjek din e-mail!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Når du har tilmeldt dig igen, hvis du stadig ikke kan se e-mails i din indbakke, skal du tjekke din spam-mappe. Nogle e-mailudbydere registrerer tidligere spam-klager og vil blive ved med at markere e-mails. Hvis dette sker, skal du markere det seneste nyhedsbrev som 'Ikke spam' for at flytte det tilbage til din primære indbakke.", diff --git a/ghost/i18n/locales/de-CH/portal.json b/ghost/i18n/locales/de-CH/portal.json index e89b7324d28..194f7a0d1da 100644 --- a/ghost/i18n/locales/de-CH/portal.json +++ b/ghost/i18n/locales/de-CH/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Wenn die Spam-Beschwerde versehentlich war oder Sie wieder E-Mails erhalten möchten, können Sie sich durch Klicken auf den Button auf dem vorherigen Bildschirm erneut für E-Mails anmelden.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Wenn Sie Ihr Abo jetzt kündigen, haben Sie noch Zugang bis zum {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Wenn Sie eine Firmen- oder Regierungs-E-Mail-Adresse nutzen, wenden Sie sich bitte an Ihre IT-Abteilung und bitten Sie sie, E-Mails von {senderEmail} zu erlauben", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Wenn Sie wieder E-Mails erhalten möchten, prüfen Sie bitte Ihre hinterlegte E-Mail-Adresse auf mögliche Tippfehler und klicken Sie anschliessend auf dem vorherigen Bildschirm auf abonnieren.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Sollten Sie den abonnierten Newsletter nicht erhalten, gibt es einige Dinge, die Sie überprüfen können.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Wenn Sie all diese Punkte erledigt haben und immer noch keine E-Mails erhalten, wenden Sie sich bitte an {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Sie benötigen weitere Hilfe? Kontaktieren Sie den Support.", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newsletter können aus zwei Gründen in Ihrem Konto deaktiviert werden: Eine frühere E-Mail wurde als Spam markiert oder der Versuch, eine E-Mail zu senden, führte zu einem dauerhaften Fehler (Bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Es existiert kein Mitglied mit dieser E-Mail-Adresse.", - "No member exists with this e-mail address. Please sign up first.": "Es existiert kein Mitglied mit dieser E-Mail-Adresse. Bitte registrieren Sie sich zuerst.", + "No member exists with this email address.": "Es existiert kein Mitglied mit dieser E-Mail-Adresse.", + "No member exists with this email address. Please sign up first.": "Es existiert kein Mitglied mit dieser E-Mail-Adresse. Bitte registrieren Sie sich zuerst.", "Not receiving emails?": "Kein E-Mail erhalten?", "Now check your email!": "Überprüfen Sie bitte Ihren Posteingang.", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Wenn Sie nach Ihrer Registrierung keine E-Mail von uns im Posteingang haben, überprüfen Sie Ihren Spam-Ordner. Einige E-Mail-Anbieter speichern frühere Spam-Beschwerden und kennzeichnen E-Mails weiterhin. Für diesen Fall markieren Sie den neusten Newsletter als \"Kein Spam\", um ihn in Ihren Posteingang zu verschieben.", diff --git a/ghost/i18n/locales/de/portal.json b/ghost/i18n/locales/de/portal.json index 8e95b143fc4..a5d63940dd4 100644 --- a/ghost/i18n/locales/de/portal.json +++ b/ghost/i18n/locales/de/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Wenn die Spam-Beschwerde versehentlich war oder du wieder E-Mails erhalten möchtest, kannst du dich durch Klicken auf den Button auf dem vorherigen Bildschirm erneut für E-Mails anmelden.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Wenn du dein Abonnement jetzt kündigst, hast du noch bis zum {periodEnd} Zugang.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Wenn du eine Firmen- oder Regierungs-E-Mail-Adresse nutzt, wende dich an deine IT-Abteilung und bitte sie, E-Mails von {senderEmail} zu erlauben", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Wenn du wieder E-Mails erhalten möchtest, solltest du deine hinterlegte E-Mail-Adresse auf Probleme überprüfen und dann auf dem vorherigen Bildschirm auf \"erneut abonnieren\" klicken.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Wenn du den Newsletter, für den du dich angemeldet hast, nicht erhältst, gibt es einige Dinge, die du überprüfen kannst.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Wenn du all diese Punkte erledigt hast und immer noch keine E-Mails erhältst, kannst du Unterstützung erhalten, indem du dich an {supportAddress} wendest.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Du benötigst weitere Hilfe? Kontaktiere den Support", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newsletter können aus zwei Gründen in deinem Konto deaktiviert werden: Eine frühere E-Mail wurde als Spam markiert oder der Versuch, eine E-Mail zu senden, führte zu einem dauerhaften Fehler (Bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Mit dieser E-Mail Adresse existiert kein Mitglied.", - "No member exists with this e-mail address. Please sign up first.": "Mit dieser E-Mail Adresse existiert kein Mitglied. Bitte versuche es erneut.", + "No member exists with this email address.": "Mit dieser E-Mail Adresse existiert kein Mitglied.", + "No member exists with this email address. Please sign up first.": "Mit dieser E-Mail Adresse existiert kein Mitglied. Bitte versuche es erneut.", "Not receiving emails?": "Keine E-Mails erhalten?", "Now check your email!": "Überprüfe jetzt deinen Posteingang!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Wenn du nach der Registrierung immer noch keine E-Mails in deinem Posteingang siehst, überprüfen deinen Spam-Ordner. Einige E-Mail-Anbieter speichern frühere Spam-Beschwerden und kennzeichnen E-Mails weiterhin. Wenn dies der Fall ist, markiere den neuesten Newsletter als \"Kein Spam\", um ihn wieder in deinen Posteingang zu verschieben.", diff --git a/ghost/i18n/locales/el/portal.json b/ghost/i18n/locales/el/portal.json index 08ea5c36d6f..5e71631770c 100644 --- a/ghost/i18n/locales/el/portal.json +++ b/ghost/i18n/locales/el/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Αν η αναφορά ανεπιθύμητης αλληλογραφίας ήταν κατά λάθος ή θέλετε να αρχίσετε να λαμβάνετε ξανά emails, μπορείτε να εγγραφείτε ξανά κάνοντας κλικ στο κουμπί στην προηγούμενη οθόνη.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Αν ακυρώσετε τη συνδρομή σας τώρα, θα συνεχίσετε να έχετε πρόσβαση μέχρι {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Αν έχετε εταιρικό ή κυβερνητικό λογαριασμό email, επικοινωνήστε με το τμήμα IT και ζητήστε τους να επιτρέψουν την παραλαβή emails από {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Αν θέλετε να αρχίσετε να λαμβάνετε ξανά emails, τα καλύτερα επόμενα βήματα είναι να ελέγξετε τη διεύθυνση email που έχετε καταχωρήσει για τυχόν προβλήματα και στη συνέχεια να κάνετε κλικ στην επανεγγραφή στην προηγούμενη οθόνη.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Αν δεν λαμβάνετε το ενημερωτικό δελτίο email στο οποίο έχετε εγγραφεί, εδώ είναι μερικά πράγματα που πρέπει να ελέγξετε.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Αν έχετε ολοκληρώσει όλους αυτούς τους ελέγχους και εξακολουθείτε να μην λαμβάνετε emails, μπορείτε να επικοινωνήσετε με την υποστήριξη επικοινωνώντας με {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Χρειάζεστε περισσότερη βοήθεια; Επικοινωνήστε με την υποστήριξη", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Τα ενημερωτικά δελτία μπορούν να απενεργοποιηθούν στον λογαριασμό σας για δύο λόγους: Ένα προηγούμενο email επισημάνθηκε ως ανεπιθύμητο ή η προσπάθεια αποστολής email είχε ως αποτέλεσμα μόνιμη αποτυχία (αναπήδηση).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Δεν λαμβάνετε emails;", "Now check your email!": "Τώρα ελέγξτε το email σας!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Μόλις εγγραφείτε ξανά, αν εξακολουθείτε να μην βλέπετε emails στα εισερχόμενά σας, ελέγξτε τον φάκελο ανεπιθύμητης αλληλογραφίας. Ορισμένοι πάροχοι εισερχομένων διατηρούν αρχείο προηγούμενων αναφορών ανεπιθύμητης αλληλογραφίας και θα συνεχίσουν να επισημαίνουν emails. Αν συμβεί αυτό, επισημάνετε το τελευταίο ενημερωτικό δελτίο ως 'Μη ανεπιθύμητο' για να το μετακινήσετε ξανά στα κύρια εισερχόμενά σας.", diff --git a/ghost/i18n/locales/en/portal.json b/ghost/i18n/locales/en/portal.json index e1b2960b4ff..4cafe4f4c20 100644 --- a/ghost/i18n/locales/en/portal.json +++ b/ghost/i18n/locales/en/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "", @@ -120,8 +121,8 @@ "Need more help? Contact support": "", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "", "Now check your email!": "", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "", diff --git a/ghost/i18n/locales/eo/portal.json b/ghost/i18n/locales/eo/portal.json index 94f4f8fdecc..5cd6346cd91 100644 --- a/ghost/i18n/locales/eo/portal.json +++ b/ghost/i18n/locales/eo/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "", @@ -120,8 +121,8 @@ "Need more help? Contact support": "", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "", "Now check your email!": "Bonvolu kontroli vian retpoŝton nun!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "", diff --git a/ghost/i18n/locales/es/portal.json b/ghost/i18n/locales/es/portal.json index fb0da634201..87a8c46d9ed 100644 --- a/ghost/i18n/locales/es/portal.json +++ b/ghost/i18n/locales/es/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Si la denuncia de spam fue accidental, o si quiere recibir los correos electrónicos de nuevo, puede volver a suscribirse a los correos haciendo click en el botón de la pantalla anterior.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Si cancelas tu suscripción ahora, continuarás con acceso hasta el {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Si tienes un correo electrónico corporativo o del gobierno, puedes comunicarte con el departamento de TI y solicitar que te permitan recibir correos de {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Si deseas comenzar a recibir correos electrónicos nuevamente, lo mejor es verificar tu dirección de correo electrónico registrada para detectar cualquier problema y luego hacer clic en volver a suscribirse en la pantalla anterior.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Si no estás recibiendo los boletines informativos a los que te suscribiste, estas son algunas cosas que puedes revisar.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Si has comprobado todo y aun así no estás recibiendo los correos electrónicos, puedes comunicarte con soporte técnico contactando con {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "¿Necesitas más ayuda? Contacta con soporte técnico.", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Los boletines se pueden deshabilitar en tu cuenta por dos razones: Un correo electrónico anterior se marcó como correo no deseado o el intento de enviar un correo electrónico resultó en un fallo permanente (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "No existe un miembro con este correo electrónico", - "No member exists with this e-mail address. Please sign up first.": "No existe un miembro con este correo electrónico. Por favor regístrate primero.", + "No member exists with this email address.": "No existe un miembro con este correo electrónico", + "No member exists with this email address. Please sign up first.": "No existe un miembro con este correo electrónico. Por favor regístrate primero.", "Not receiving emails?": "¿No recibes correos electrónicos?", "Now check your email!": "¡Ahora revisa tu correo electrónico!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Una vez que te hayas vuelto a suscribir, si aún no ves los correos electrónicos en tu bandeja de entrada, verifica tu carpeta de spam. Algunos proveedores de correo mantienen un registro de quejas de spam anteriores y continuarán marcando los correos electrónicos. Si esto sucede, marca el último boletín como \"No es spam\" para moverlo nuevamente a tu bandeja de entrada principal.", diff --git a/ghost/i18n/locales/et/portal.json b/ghost/i18n/locales/et/portal.json index 6480dc9407d..42785e0ab98 100644 --- a/ghost/i18n/locales/et/portal.json +++ b/ghost/i18n/locales/et/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Kui rämpspostiteatamise kaebus oli juhuslik või soovite uuesti e-kirju saada, saate e-kirjade tellimuse uuesti tellida, klõpsates eelmisel ekraanil olevat nuppu.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Kui tühistate oma tellimuse nüüd, jääb teile juurdepääs kuni {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Kui teil on ettevõtte või valitsuse e-posti konto, pöörduge oma IT-osakonna poole ja paluge neil lubada e-kirjade vastuvõtmine aadressilt {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Kui soovite uuesti e-kirju saada, on järgmiseks parimaks sammuks kontrollida oma registreeritud e-posti aadressi probleemide suhtes ja seejärel klõpsata eelmisel ekraanil uuesti tellimisnuppu.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Kui te ei saa e-posti uudiskirja, mille olete tellinud, on siin mõned asjad, mida kontrollida.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Kui olete kõik need kontrollid läbi viinud ja te ikka ei saa e-kirju, võite abi saamiseks pöörduda aadressil {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Vajate rohkem abi? Võtke ühendust toega", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Uudiskirjad võidakse teie kontol keelata kahel põhjusel: eelmine e-kiri märgiti rämpspostiks või e-kirja saatmise katse põhjustas püsiva tõrke (tagasipõrke).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Ei saa e-kirju?", "Now check your email!": "Nüüd kontrollige oma e-posti!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Kui olete uuesti tellinud ja te ikka ei näe e-kirju oma postkastis, kontrollige oma rämpsposti kausta. Mõned postkasti teenusepakkujad säilitavad varasemaid rämpspostikaebusi ja jätkavad e-kirjade märkimist. Kui see juhtub, märkige viimane uudiskiri 'Mitte rämpspost', et see liiguks tagasi teie põhipostkasti.", diff --git a/ghost/i18n/locales/eu/portal.json b/ghost/i18n/locales/eu/portal.json index cd4853d3cba..c631d410233 100644 --- a/ghost/i18n/locales/eu/portal.json +++ b/ghost/i18n/locales/eu/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Mezu baztergarriatzat markatu izana nahi gabe izan bada, edo ePostak berriro jaso nahiko bazenitu, aurreko orrian ageri den botoia sakatu dezakezu berriro harpidetzeko.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Harpidetza gaur uzten baduzu, {periodEnd} arte izango duzu edukira sarbidea.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Enpresa- edo gobernu-posta baduzu, jar zaitez harremanetan IT sailarekin eta eska iezaiezu baimentzeko {senderEmail}(r)en mezuak jasotzea", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "ePostak berriro jasotzen hasi nahi baduzu, egiaztatu fitxategian zure helbide elektronikoa edozein arazotarako, eta, ondoren, egin klik aurreko orriko botoian.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "ePostan harpidetu zaren buletina jaso ez baduzu, honakoak egiaztatu ditzakezu.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Egiaztaketa horiek guztiak egin badituzu eta, hala ere, mezurik jasotzen ez baduzu, {supportAddress} helbidera idatz dezakezu laguntza eskatzeko.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Laguntza gehiago behar al duzu? Jarri harremanetan", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Zure kontuan buletinak desgaitzeko bi arrazoi daude: aurreko mezuetako bat baztergarritzat jo izana, edo ePosta bideltzean etengabeko hutsegitea (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Ez dago ePosta helbide hau duen kiderik.", - "No member exists with this e-mail address. Please sign up first.": "Ez dago ePosta helbide hau duen kiderik. Eman izena hasteko.", + "No member exists with this email address.": "Ez dago ePosta helbide hau duen kiderik.", + "No member exists with this email address. Please sign up first.": "Ez dago ePosta helbide hau duen kiderik. Eman izena hasteko.", "Not receiving emails?": "Ez duzu ePostarik jasotzen?", "Now check your email!": "Arakatu orain zure ePosta!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Berriro harpidetuz gero, eta, hala ere, postontzian ePostarik ikusten ez baduzu, arakatu posta baztergarriaren karpeta. Hornitzaile batzuek iraganeko arau-hausleen erregistroak daramatzate eta ePosta batzuk mugatzen dituzte. Hau gertatuko balitzaizu, markatu azken buletina 'ez baztergarritzat' postontzi nagusira eramateko.", diff --git a/ghost/i18n/locales/fa/portal.json b/ghost/i18n/locales/fa/portal.json index 0eee080f75e..46583d9f8a4 100644 --- a/ghost/i18n/locales/fa/portal.json +++ b/ghost/i18n/locales/fa/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "در صورتی که گزارش اسپم ارسالی اتفاقی بوده، یا این که تمایل داشتید که دوباره ایمیل\u200cها را دریافت کنید، می\u200cتوانید دوباره با کلیک برروی گزینه دریافت اشتراک در برگه قبلی ایمیل\u200cها را دریافت کنید.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "در صورتی که اشتراک خود را لغو کنید تا تاریخ {periodEnd} کماکان به بسته خود دسترسی خواهید داشت.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "در صورتی که از آدرس ایمیل شرکتی و یا دولتی استفاده می\u200cکنید، با بخش آی\u200cتی خود تماس بگیرید و درخواست کنید که ایمیل\u200cهای ارسالی از طرف {senderEmail} را در لیست سفید قرار دهند.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "در صورتی که مایل هستید که دوباره ایمیل\u200cها را دریافت کید، بهترین راه\u200cکار بررسی آدرس ایمیل خود و سپس کلیک برروی گزینه دریافت اشتراک در صفحه قبلی است.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "در صورتی که شما ایمیل خبرنامه\u200cهایی که مشترک آن\u200cها شده\u200cاید را دریافت نمی\u200cکنید، این موارد را بررسی کنید.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "در صورتی که شما تمامی این کارها را انجام داده و همچنان ایمیلی دریافت نمی\u200cکنید، می\u200cتوانید با پشتیبانی از طریق {supportAddress} تماس بگیرید.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "کمک بیشتری لازم دارید؟ با پشتیبانی تماس بگیرید", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "خبرنامه\u200cها ممکن است به خاطر دو دلیل برای شما غیرفعال شده باشند: ایمیلی که قبلاً برای شما ارسال شده به عنوان اسپم علامت\u200cگذاری شده باشد و یا این که با یک شکست دائمی (bounce) روبرو شده باشد.", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "ایمیلی دریافت نمی\u200cکنید؟", "Now check your email!": "حالا صندوق ورودی ایمیل خود را بررسی کنید!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "پس از دریافت مجدد اشتراک، در صورتی که کماکان ایمیل\u200cها را در ایمیل خود نمی\u200cبینید، پوشه اسپم را بررسی کنید. برخی از سرویس\u200cدهندگان تاریخچه گزارش اسپم را نگهداری می\u200cکنند و همچنان ایمیل\u200cها را به عنوان اسپم علامت\u200cگذاری می\u200cکنند. در صورتی که این مورد وجود داشت، ایمیل را با عنوان «اسپم نیست» علامت\u200cگذاری کنید تا آن را به صندوق ورودی انتقال دهد.", diff --git a/ghost/i18n/locales/fi/portal.json b/ghost/i18n/locales/fi/portal.json index 031a9d5c31b..40dd39efe9f 100644 --- a/ghost/i18n/locales/fi/portal.json +++ b/ghost/i18n/locales/fi/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Jos spam-valitus oli aiheeton, tai haluaisit saada taas viestejä, voit uudelleen ilmoittautua sähköposteihin painamalla nappia edellisellä sivulla.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Jos haluat perua tilauksesi nyt, sinulla on vielä oikeus materiaaliin {periodEnd} asti", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Jos sinulla on yritys- tai valtion sähköposti, pyydä IT-osastoa hyväksymään sähköpostit lähettäjältä {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Jos haluat saada taas sähköposteja, paras tapa jatkaa on tarkistaa sähköpostiosoitteesi ja sitten klikata uudelleen uutiskirjeeseen osallistumista edellisellä sivulla.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Jos et saa uutiskirjettä sähköpostiisi, tässä on muutama asia tarkistettavaksi:", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Jos et vieläkään saa uutiskirjeitä, ota yhteyttä {supportAddress}", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Tarvitsetko lisää apua? Ota yhteyttä tukeen", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Uutiskirjeet sähköpostiisi voivat peruuntua kahdesta syystä: edellinen sähköposti oli merkattu spammiksi, tai sähköpostin lähetyksestä tuli bounce.", "Next payment": "", - "No member exists with this e-mail address.": "Tälle sähköpostiosoitteelle ei löydy jäsenyyttä.", - "No member exists with this e-mail address. Please sign up first.": "Tälle sähköpostiosoitteelle ei löydy jäsenyyttä. Rekisteröidy ensin.", + "No member exists with this email address.": "Tälle sähköpostiosoitteelle ei löydy jäsenyyttä.", + "No member exists with this email address. Please sign up first.": "Tälle sähköpostiosoitteelle ei löydy jäsenyyttä. Rekisteröidy ensin.", "Not receiving emails?": "Etkö saa sähköposteja?", "Now check your email!": "Nyt tarkista sähköpostisi", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Kun olet tilannut sähköpostit uudelleen ja et vieläkään saa posteja, katso ensimmäiseksi spam-kansio. Jotkut tarjoajat pitävät listaa ennen merkityistä viesteistä ja estävät niitä jatkossakin. Jos näin tapahtuu, merkitse viesti Not Spam ja siirrä se postilaatikkoosi.", diff --git a/ghost/i18n/locales/fr/portal.json b/ghost/i18n/locales/fr/portal.json index 1ed688fbaab..2acc3ae50a8 100644 --- a/ghost/i18n/locales/fr/portal.json +++ b/ghost/i18n/locales/fr/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Si le signalement spam était accidentel ou que vous souhaitiez de nouveau recevoir les newsletters, vous pourrez vous réinscrire en cliquant sur le bouton de la page précédente.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Si vous annulez votre abonnement maintenant, vous pourrez encore y accéder jusqu'au {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Si vous avez un compte e-mail commercial ou gouvernemental, demandez à votre service informatique d'autoriser les e-mails provenant de {senderEmail}.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Si vous souhaitiez à nouveau recevoir les e-mails, le mieux serait de vérifier toute erreur sur le compte de l'adresse e-mail renseignée, puis de cliquer Réinscription sur la page précédente.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Si vous ne recevez pas la newsletter à laquelle vous avez souscrit, voici quelques points à vérifier.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Si vous avez complété toutes ces étapes et ne recevez toujours pas d'e-mails, veuillez nous écrire à {supportAddress} pour obtenir de l'aide.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Besoin d'aide? Écrivez au support", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Les newsletters peuvent être désactivées de votre compte pour deux raisons : un précédent e-mail a été marqué indésirable ou une tentative d'envoi d'e-mail a entraîné une erreur persistante (renvoi).", "Next payment": "", - "No member exists with this e-mail address.": "Aucun(e) abonné(e) n'existe avec cette adresse e-mail.", - "No member exists with this e-mail address. Please sign up first.": "Aucun(e) abonné(e) n'existe avec cette adresse e-mail. Veuillez vous inscrire d'abord.", + "No member exists with this email address.": "Aucun(e) abonné(e) n'existe avec cette adresse e-mail.", + "No member exists with this email address. Please sign up first.": "Aucun(e) abonné(e) n'existe avec cette adresse e-mail. Veuillez vous inscrire d'abord.", "Not receiving emails?": "Vous ne recevez pas les e-mails ?", "Now check your email!": "Veuillez vérifier votre boîte de réception !", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Après votre réinscription, si vous ne voyez toujours pas nos e-mails dans votre boîte de réception, veuillez vérifier votre dossier d'indésirables. Certains fournisseurs gardent en mémoire les précédents signalements et continuent de marquer ces e-mails comme indésirables. Si tel était le cas, veuillez marquer la dernière newsletter comme non indésirable et la placer dans votre boîte de réception.", diff --git a/ghost/i18n/locales/gd/portal.json b/ghost/i18n/locales/gd/portal.json index 48fe75cf629..fc3e94b41aa 100644 --- a/ghost/i18n/locales/gd/portal.json +++ b/ghost/i18n/locales/gd/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ma tha thu airson puist-d fhaighinn a-rithist, faodaidh tu fo-sgrìobhadh a-rithist le bhith a’ briogadh air a’ cheangail air an duilleag roimhe.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ma chuireas tu stad air a’ bhallrachd agad, bidh cothrom inntrididh agad air gu ruige: {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ma tha post-d corparra agad, dh’fhaodadh gu bheil agad ri innse dhan sgioba IT agad puist-d bho {senderEmail} a cheadachadh.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ma tha thu airson puist-d fhaighinn a-rithist, faodaidh tu fo-sgrìobhadh a-rithist le bhith a’ briogadh air a’ cheangail air an duilleag roimhe.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Thoir sùil air na rudan na leanas mura h-eil thu a’ faighinn puist-d.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Leig fios gu {supportAddress} mura h-eil thu a’ faighinn puist-d an dèidh sùil a thoirt air na rudan seo.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "’Eil thu feumach air barrachd chobhair? Leig fios dhan sgioba-taice", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Dh’fhaodadh gu bheil cuairt-litrichean à comas air sgàth ’s gun deach post-d roimhe a chomharradh mar spama, no air sgàth ’s nach do ghabh e a lìbhreachadh.", "Next payment": "", - "No member exists with this e-mail address.": "Chan eil cleachdaiche ann leis a' phost-d seo.", - "No member exists with this e-mail address. Please sign up first.": "Chan eil cleachdaiche ann leis a' phost-d seo. Clàraich an toiseach.", + "No member exists with this email address.": "Chan eil cleachdaiche ann leis a' phost-d seo.", + "No member exists with this email address. Please sign up first.": "Chan eil cleachdaiche ann leis a' phost-d seo. Clàraich an toiseach.", "Not receiving emails?": "Nach eil thu a’ faighinn puist-d?", "Now check your email!": "Thoir sùil air a’ phost-d agad", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Thoir sùil air a’ phasgan spama agad mura faigh thu puist-d aon uair ’s gu bheil thu air fo-sgrìobhadh a-rithist. Cumaidh cuid de sholaraichean puist de chlàr de sheann ghearanan spama agus ma dh’fhaoidte gu bheil iad fhathast gan comharradh mar spama. Comharraich \"nach e spama\" a th’ annta gus an gluasad air ais dhan bhogsa a-steach agad.", diff --git a/ghost/i18n/locales/he/portal.json b/ghost/i18n/locales/he/portal.json index 6ddee5900b9..ceb501b83e2 100644 --- a/ghost/i18n/locales/he/portal.json +++ b/ghost/i18n/locales/he/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "אם תלונת הספאם הייתה בטעות, או שתרצו להתחיל לקבל מיילים שוב, ניתן להירשם מחדש למיילים על ידי לחיצה על הכפתור במסך הקודם.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "אם תבטלו את המנוי כעת, תמשיכו לקבל גישה עד {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "אם יש לכם חשבון מייל עסקי או ממשלתי, פנו למחלקת ה-IT שלכם ובקשו מהם לאפשר קבלת מיילים מאת {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "אם תרצו להתחיל לקבל מיילים שוב, הצעדים הטובים ביותר הם לבדוק את כתובת המייל שלכם וללחוץ על הכפתור להרשמה מחדש במסך הקודם.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "אם אתם לא מקבלים את ניוזלטר המייל שנרשמתם אליו, כאן כמה דברים לבדוק.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "אם ביצעתם את כל הבדיקות הללו ועדיין לא מקבלים מיילים, ניתן לפנות לתמיכה על ידי פנייה אל {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "צריכים עזרה נוספת? צרו קשר עם התמיכה", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "ניוזלטרים יכולים להיות מושבתים בחשבון שלכם משני סיבות: מייל קודם סומן כספאם, או ניסיון לשלוח מייל גרם לתקלה קבועה (הקפצה).", "Next payment": "", - "No member exists with this e-mail address.": "לא קיים חבר עם כתובת המייל הזו.", - "No member exists with this e-mail address. Please sign up first.": "לא קיים חבר עם כתובת המייל הזו. נא להירשם תחילה.", + "No member exists with this email address.": "לא קיים חבר עם כתובת המייל הזו.", + "No member exists with this email address. Please sign up first.": "לא קיים חבר עם כתובת המייל הזו. נא להירשם תחילה.", "Not receiving emails?": "לא מקבלים מיילים?", "Now check your email!": "עכשיו בדקו את תיבת המייל שלכם!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "אחרי שתירשמו מחדש, אם אתם עדיין לא רואים מיילים בתיבת הנכנסות שלכם, בדקו את תיבת הספאם שלכם. חלק מספקי תיבת המייל שומרים רשומה של תלונות ספאם קודמות וימשיכו לסמן מיילים. אם זה קורה, סמנו את הניוזלטר האחרון כ\"לא ספאם\" כדי להחזיר אותו לתיבת הנכנסות הראשית שלכם.", diff --git a/ghost/i18n/locales/hi/portal.json b/ghost/i18n/locales/hi/portal.json index 131eca601da..021702dd734 100644 --- a/ghost/i18n/locales/hi/portal.json +++ b/ghost/i18n/locales/hi/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "यदि स्पैम शिकायत दुर्घटनावश थी, या आप फिर से ईमेल प्राप्त करना शुरू करना चाहते हैं, तो आप पिछली स्क्रीन पर बटन पर क्लिक करके ईमेल की सदस्यता पुनः प्राप्त कर सकते हैं।", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "यदि आप अब अपनी सदस्यता रद्द करते हैं, तो आपके पास {periodEnd} तक पहुंच बनी रहेगी।", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "यदि आपके पास एक कॉर्पोरेट या सरकारी ईमेल खाता है, तो अपनी आईटी विभाग से संपर्क करें और उनसे {senderEmail} से ईमेल प्राप्त करने की अनुमति माँगें", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "यदि आप फिर से ईमेल प्राप्त करना शुरू करना चाहते हैं, तो अगला सबसे अच्छा कदम अपने फ़ाइल पर ईमेल पते की किसी भी समस्या के लिए जाँच करना है और फिर पिछली स्क्रीन पर पुनः सदस्यता पर क्लिक करें।", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "यदि आपको वह ईमेल न्यूज़लेटर नहीं मिल रहा है जिसकी आपने सदस्यता ली है, तो यहाँ कुछ चीजें हैं जिन्हें जांचें।", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "यदि आपने इन सभी जाँचों को पूरा कर लिया है और आपको अभी भी ईमेल प्राप्त नहीं हो रहे हैं, तो आप {supportAddress} से संपर्क करके समर्थन प्राप्त कर सकते हैं।", @@ -120,8 +121,8 @@ "Need more help? Contact support": "और अधिक मदद चाहिए? समर्थन से संपर्क करें", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "आपके खाते पर न्यूज़लेटर को दो कारणों से निष्क्रिय किया जा सकता है: एक पिछला ईमेल स्पैम के रूप में चिह्नित किया गया था, या एक ईमेल भेजने का प्रयास एक स्थायी विफलता (बाउंस) के कारण हुआ।", "Next payment": "", - "No member exists with this e-mail address.": "इस ईमेल पते के साथ कोई सदस्य मौजूद नहीं है।", - "No member exists with this e-mail address. Please sign up first.": "इस ईमेल पते के साथ कोई सदस्य मौजूद नहीं है। कृपया पहले साइनअप करें।", + "No member exists with this email address.": "इस ईमेल पते के साथ कोई सदस्य मौजूद नहीं है।", + "No member exists with this email address. Please sign up first.": "इस ईमेल पते के साथ कोई सदस्य मौजूद नहीं है। कृपया पहले साइनअप करें।", "Not receiving emails?": "ईमेल प्राप्त नहीं हो रहे?", "Now check your email!": "अब अपना ईमेल जांचें!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "पुनः सदस्यता लेने के बाद, यदि आप अभी भी अपने इनबॉक्स में ईमेल नहीं देखते हैं, तो अपना स्पैम फ़ोल्डर जांचें। कुछ इनबॉक्स प्रदाता पिछली स्पैम शिकायतों का रिकॉर्ड रखते हैं और ईमेल को फ्लैग करना जारी रखेंगे। यदि ऐसा होता है, तो नवीनतम न्यूज़लेटर को 'स्पैम नहीं' के रूप में चिह्नित करें ताकि इसे वापस आपके मुख्य इनबॉक्स में ले जाया जा सके।", diff --git a/ghost/i18n/locales/hr/portal.json b/ghost/i18n/locales/hr/portal.json index e44e1655374..33d17b1ae60 100644 --- a/ghost/i18n/locales/hr/portal.json +++ b/ghost/i18n/locales/hr/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ako je pritužba na spam bila slučajna ili želite ponovno početi primati e-poštu, možete se ponovno pretplatiti klikom na link na prethodnom ekranu.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ako otkažete vašu pretplatu sada, zadržat će te pristup do {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ako imate korporativni ili državni račun e-pošte, obratite se svom IT odjelu i zamolite ih da dopuste primanje e-pošte od {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ako želite ponovno početi primati e-poštu, najbolji sljedeći korak je provjeriti postoje li problemi na vašoj adresi e-pošte, a zatim kliknuti na ponovnu pretplatu na prethodnom ekranu.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ako ne primate newsletter na adresu e-pošte kojom ste se pretplatili, evo nekoliko stvari koje trebate provjeriti.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ako ste dovršili sve ove provjere, a još uvijek ne primate e-poštu, možete se obratiti za podršku na {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Kontaktirajte nas ako trebate dodatnu pomoć", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Slanje newsletter-a se može onemogućiti na vašem računu iz dva razloga: prethodna e-pošta je označena kao neželjena pošta (spam) ili je pokušaj slanja e-pošte rezultirao trajnim neuspjehom (odbijanje).", "Next payment": "", - "No member exists with this e-mail address.": "Korisnik sa ovom email adresom ne postoji.", - "No member exists with this e-mail address. Please sign up first.": "Korisnik sa ovom email adresom ne postoji. Prvo se registrirajte.", + "No member exists with this email address.": "Korisnik sa ovom email adresom ne postoji.", + "No member exists with this email address. Please sign up first.": "Korisnik sa ovom email adresom ne postoji. Prvo se registrirajte.", "Not receiving emails?": "Ne dobivate e-poštu?", "Now check your email!": "Provjerite vašu e-poštu!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Nakon što se ponovno pretplatite, ako i dalje ne vidite e-poštu u svojoj pristigloj pošti, provjerite mapu neželjene pošte. Neki pružatelji usluga e-pošte vode evidenciju prethodnih pritužbi na neželjenu poštu i nastavit će označavati e-poštu. Ako se to dogodi, označite najnoviji newsletter kao \"Nije neželjena pošta\" da biste ga vratili u svoju primarnu pristiglu poštu.", diff --git a/ghost/i18n/locales/hu/portal.json b/ghost/i18n/locales/hu/portal.json index d50699a5793..97156baa506 100644 --- a/ghost/i18n/locales/hu/portal.json +++ b/ghost/i18n/locales/hu/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ha a spam panasz véletlen volt, vagy újra szeretnéd kapni az e-maileket, akkor az előző képernyőn látható gombra kattintva újra feliratkozhatsz.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ha lemondod most az előfizetésedet, továbbra is hozzáférsz az előfizetői tartalmakhoz eddig: {periodEnd}", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ha céges vagy kormányzati e-mail-fiókod van, akkor lépj kapcsolatba a fiók-adminisztrátorral, hogy engedélyezze az e-mailek fogadását az alábbi e-mail-címről: {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ha újra szeretnél e-maileket kapni tőlünk, kérjük ellenőrizd az e-mail-címed, és kattints az újrafeliratkozásra az előző képernyőn.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Íme pár dolog, amiket ellenőrizhetsz, ha nem kapsz tőlünk e-maileket.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ha a fenti lehetőségeket ellenőrizted, és továbbra sem kapsz e-maileket, kérjük, lépj kapcsolatba velünk az alábbi e-mail-címen: {supportAddress}", @@ -120,8 +121,8 @@ "Need more help? Contact support": "További segítségre van szükséged? Lépj velünk kapcsolatba", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "A hírlevelek két okból tilthatók le a fiókodban: egy korábbi e-mail spamként lett megjelölve, vagy egy e-mail küldési kísérlet tartós hibához (visszapattanáshoz) vezetett.", "Next payment": "", - "No member exists with this e-mail address.": "Ehhez az e-mail-címhez nem tartozik fiók.", - "No member exists with this e-mail address. Please sign up first.": "Ehhez az e-mail-címhez nem tartozik fiók. Kérjük, először regisztrálj.", + "No member exists with this email address.": "Ehhez az e-mail-címhez nem tartozik fiók.", + "No member exists with this email address. Please sign up first.": "Ehhez az e-mail-címhez nem tartozik fiók. Kérjük, először regisztrálj.", "Not receiving emails?": "Nem kapsz e-maileket?", "Now check your email!": "Ellenőrizd a postafiókodat most!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Miután újra feliratkoztál, de még mindig nem látod az e-maileket a beérkező mappádban, ellenőrizd a spam mappát is. Néhány e-mail szolgáltató nyilvántartást vezet korábbi spam panaszokról, és továbbra is megjelölheti az e-maileket. Ezután a legújabb hírlevelet jelöld meg 'Nem spamként', hogy visszakerüljön a beérkező levelek mappába.", diff --git a/ghost/i18n/locales/id/portal.json b/ghost/i18n/locales/id/portal.json index b106ff1129f..5d5f26199a4 100644 --- a/ghost/i18n/locales/id/portal.json +++ b/ghost/i18n/locales/id/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Jika keluhan spam tersebut tidak disengaja, atau Anda ingin mulai menerima email lagi, Anda dapat berlangganan kembali untuk menerima email dengan mengklik tombol di layar sebelumnya.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Jika Anda membatalkan langganan sekarang, Anda akan tetap memiliki akses hingga {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Jika Anda memiliki akun email perusahaan atau pemerintah, hubungi departemen IT Anda dan mintalah mereka untuk mengizinkan pengiriman email dari {senderEmail} diterima.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Jika Anda ingin mulai menerima email lagi, langkah-langkah terbaik selanjutnya adalah memeriksa alamat email Anda pada data yang tersimpan untuk memastikan tidak ada masalah, kemudian klik tombol 'berlangganan kembali' pada layar sebelumnya.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Jika Anda tidak menerima buletin email langganan Anda, berikut adalah beberapa hal yang perlu diperiksa.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Jika Anda telah melakukan semua pemeriksaan tersebut dan masih belum menerima email, Anda dapat menghubungi kami melalui kontak {supportAddress} untuk mendapatkan bantuan.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Perlu bantuan lebih lanjut? Hubungi layanan dukungan", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Buletin dapat dinonaktifkan pada akun Anda dengan dua alasan: Email sebelumnya ditandai sebagai spam, atau percobaan pengiriman email menghasilkan kegagalan permanen (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Tidak ada anggota yang terdaftar dengan alamat email ini.", - "No member exists with this e-mail address. Please sign up first.": "Tidak ada anggota yang terdaftar dengan alamat email ini. Silakan daftar terlebih dahulu.", + "No member exists with this email address.": "Tidak ada anggota yang terdaftar dengan alamat email ini.", + "No member exists with this email address. Please sign up first.": "Tidak ada anggota yang terdaftar dengan alamat email ini. Silakan daftar terlebih dahulu.", "Not receiving emails?": "Tidak menerima email?", "Now check your email!": "Sekarang periksa email Anda!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Setelah berlangganan kembali, jika Anda masih tidak melihat email di kotak masuk Anda, periksa folder spam. Beberapa penyedia layanan kotak masuk menyimpan catatan keluhan spam sebelumnya dan akan terus menandai email tersebut. Jika hal ini terjadi, tandai buletin terbaru sebagai 'Bukan spam' untuk memindahkannya kembali ke kotak masuk utama Anda.", diff --git a/ghost/i18n/locales/is/portal.json b/ghost/i18n/locales/is/portal.json index 0ea386233ce..bf9b50d28d0 100644 --- a/ghost/i18n/locales/is/portal.json +++ b/ghost/i18n/locales/is/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ef kvörtunin um ruslpóstinn var óviljandi eða ef þú vilt fá tölvupósta að nýju, geturðu endurvakið áskriftina með því að smella á hnappinn sem birtist í glugganum á undan.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ef þú segir upp áskriftinni núna muntu áfram hafa aðgang fram til {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ef þú ert með aðgang í nafni fyrirtækis eða ríkisstofnunar geturðu haft samband við upplýsingatæknideildina og beðið hana um að leyfa viðtöku tölvupósta frá {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ef þú vilt fá tölvupósta að nýju er nærtækast að athuga hvort netfangið sé í lagi og smella síðan á endurnýja áskrift í glugganum á undan.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ef þú færð ekki fréttabréfið sem þú ert í áskrift að þá eru hér nokkur atriði sem hægt er að skoða:", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ef þú hefur skoðað öll þess atriði og færð enn ekki tölvupósta geturðu haft samband við {supportAddress}", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Þarftu meiri aðstoð? Hafðu samband við þjónustuverið", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Færðu ekki tölvupósta?", "Now check your email!": "Athugaðu nú tölvupósthólfið þitt!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Ef þú sérð ekki tölvupósta eftir að hafa endurvakið áskrift, athugaðu spam-möppuna. Enn kunna að vera skráðar kvartanir um ruslpóst og tölvupóstarnir því flokkaður á þann veg. Ef svo er skaltu merkja síðasta fréttabréf sem 'Not spam' og færa yfir í aðalpósthólfið.", diff --git a/ghost/i18n/locales/it/portal.json b/ghost/i18n/locales/it/portal.json index d430c5ef76c..e5595178eb2 100644 --- a/ghost/i18n/locales/it/portal.json +++ b/ghost/i18n/locales/it/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Se il reclamo per spam è stato commesso per errore, o nel caso tu voglia nuovamente ricevere le email, puoi iscriverti nuovamente cliccando il bottone nella schermata precedente.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Se annulli ora il tuo abbonamento, continuerai ad avere accesso fino al {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Se possiedi un account email aziendale o governativo, contatta il reparto IT e chiedi di consentire la ricezione delle email da parte di {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Se desideri ricevere nuovamente le email, la cosa migliore da fare è controllare che non ci siano problemi con il tuo indirizzo di posta e poi cliccare su \"Reiscriviti\" nella schermata precedente.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Se non ricevi la newsletter a cui sei iscritto, ecco alcune cose da controllare.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Se hai completato tutti i passaggi e non ricevi comunque nessuna email, contatta l’assistenza a {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Hai ancora bisogno di aiuto? Contatta l'assistenza", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Le newsletter possono essere disabilitate nel tuo account per due ragioni: un'email precedente è stata segnalata come spam, o l'invio di un'email ha restituito un fallimento permanente (rimbalzo).", "Next payment": "", - "No member exists with this e-mail address.": "Nessun membro esistente con questo indirizzo e-mail.", - "No member exists with this e-mail address. Please sign up first.": "Nessun membro esistente con questo indirizzo e-mail. Effettua prima la registrazione.", + "No member exists with this email address.": "Nessun membro esistente con questo indirizzo e-mail.", + "No member exists with this email address. Please sign up first.": "Nessun membro esistente con questo indirizzo e-mail. Effettua prima la registrazione.", "Not receiving emails?": "Non ricevi le email?", "Now check your email!": "Ora controlla la tua email!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Se ancora non vedi le email una volta reiscritto, controlla nello spam. Alcuni provider tengono nota dei reclami e continuano a segnalare le email. Se questo dovesse succedere, segnala l'ultima email ricevuta come \"non spam\" e spostala nella tua posta in arrivo.", diff --git a/ghost/i18n/locales/ja/portal.json b/ghost/i18n/locales/ja/portal.json index c0669e181ef..6ece9ab18fb 100644 --- a/ghost/i18n/locales/ja/portal.json +++ b/ghost/i18n/locales/ja/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "スパムの判定が誤っていた場合、またはメールの受信を再開したい場合は、前の画面のボタンをクリックしてメールを再購読することができます。", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "今すぐ購読をキャンセルすると、{periodEnd}までアクセスできます。", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "企業または政府のメールアカウントをお持ちの場合は、IT部門に連絡し、{senderEmail}からのメール受信を許可してもらってください", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "再度メールを受け取りたい場合は、メールアドレスに問題がないかをまず確認し、次に前の画面で再購読を選択してください。", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "購読したニュースレターのメールを受け取れてない場合は、以下の点を確認してみてください。", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "これらの項目を全て満たしてもメールがまだ受け取れない場合は、{supportAddress}に連絡してサポートを受けてください。", @@ -120,8 +121,8 @@ "Need more help? Contact support": "サポートが必要ですか?お問い合わせください。", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "ニュースレターは、2つの理由によってアカウント上で無効になる場合があります: 以前のメールがスパムとしてマークされた場合、またはメールの送信が永続的な障害によって失敗した場合です。", "Next payment": "", - "No member exists with this e-mail address.": "このメールアドレスを持つメンバーはいません。", - "No member exists with this e-mail address. Please sign up first.": "このメールアドレスを持つメンバーはいません。まず登録してください。", + "No member exists with this email address.": "このメールアドレスを持つメンバーはいません。", + "No member exists with this email address. Please sign up first.": "このメールアドレスを持つメンバーはいません。まず登録してください。", "Not receiving emails?": "メールが受信されない場合", "Now check your email!": "メールを確認してください", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "再購読した後も受信トレイにメールが表示されない場合は、スパムフォルダを確認してください。一部の受信トレイは以前のスパムの記録を保持し、引き続きメールを判定します。これが起こった場合は、最新のニュースレターを「スパムではない」とマークし、受信トレイに移動してください。", diff --git a/ghost/i18n/locales/ko/portal.json b/ghost/i18n/locales/ko/portal.json index 579e82a126e..0671f27fbd1 100644 --- a/ghost/i18n/locales/ko/portal.json +++ b/ghost/i18n/locales/ko/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "스팸 신고가 실수였거나 이메일을 다시 받기를 원하면, 이전 화면의 버튼을 클릭하여 이메일을 다시 구독할 수 있어요.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "지금 구독을 취소하시면 {periodEnd}까지는 계속 이용하실 수 있어요.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "만약 회사나 정부 이메일 계정을 사용하고 있다면, IT 부서에 연락하여 {senderEmail}에서 이메일을 받을 수 있도록 요청해 주세요", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "이메일을 다시 받기를 원한다면, 가장 좋은 방법은 문제가 있는지 확인한 다음 이전 화면의 다시 구독 버튼을 클릭하는 것이에요.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "만약 구독한 이메일 뉴스레터를 받지 못하고 있다면, 확인해야 할 몇 가지 사항이 있어요.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "이 모든 확인을 완료했는데도 이메일을 받지 못하고 있다면, {supportAddress}에 연락하여 지원을 받을 수 있어요.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "더 많은 도움이 필요하신가요? 지원팀에 문의해 주세요", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "뉴스레터는 계정에서 두 가지 이유로 사용 중지될 수 있어요: 이전 이메일이 스팸으로 표시되었거나, 이메일을 보내려고 시도했지만 영구적인 실패가 발생했을 때(바운스).", "Next payment": "", - "No member exists with this e-mail address.": "이 이메일 주소로 등록된 회원이 없어요.", - "No member exists with this e-mail address. Please sign up first.": "이 이메일 주소로 등록된 회원이 없어요. 먼저 가입해 주세요.", + "No member exists with this email address.": "이 이메일 주소로 등록된 회원이 없어요.", + "No member exists with this email address. Please sign up first.": "이 이메일 주소로 등록된 회원이 없어요. 먼저 가입해 주세요.", "Not receiving emails?": "이메일을 받지 못하고 계신가요?", "Now check your email!": "지금 이메일을 확인해 주세요!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "다시 구독한 후에도 받은 편지함에 이메일이 표시되지 않는다면 스팸 폴더를 확인해 주세요. 일부 받은 편지함 제공업체는 이전 스팸 신고 기록을 유지하고 계속해서 이메일을 표시해요. 이런 경우 최신 뉴스레터를 '스팸이 아님'으로 표시하여 기본 받은 편지함으로 옮겨주세요.", diff --git a/ghost/i18n/locales/kz/portal.json b/ghost/i18n/locales/kz/portal.json index 75269be1995..201b6ab7dd9 100644 --- a/ghost/i18n/locales/kz/portal.json +++ b/ghost/i18n/locales/kz/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Егер спам шағымы кездейсоқ болса немесе сіз қайтадан электрондық хаттарды алғыңыз келсе, алдыңғы экрандағы түймені басып, қайта жазылуға болады.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Егер жазылымнан қазір бас тартсаңыз, қолжетімділік {periodEnd} мерзіміне дейін сақталады.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Егер сізде корпоративтік немесе үкіметтік электрондық пошта аккаунты болса, IT бөліміне хабарласып, {senderEmail} мекенжайынан хаттарды қабылдауға рұқсат беруін сұраңыз.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Егер қайтадан электрондық хаттарды алғыңыз келсе, ең абзалы электрондық пошта мекенжайыңызда бәрі дұрыстығын тексеру және алдыңғы экрандағы қайта жазылу түймесін басу.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Егер сіз жазылған электрондық бюллетень келмей жатса, тексеру керек бірнеше нәрсе бар.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Егер тексеру керек барлық нәрсені жасап, хаттар әлі де келмесе, {supportAddress} мекенжайына хабарласып, көмекке жүгініңіз.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Қосымша көмек керек пе? Қолдау бөліміне хабарласыңыз", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Ақпараттық бюллетеньдер аккаунтыңызда екі себеп бойынша өшірілуі мүмкін: Алдыңғы хат спам ретінде белгіленген немесе хат жіберу әрекеті тұрақты қате (қайту) шыққан.", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Хаттар келмей жатыр ма?", "Now check your email!": "Енді электрондық поштаңызды тексеріңіз!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Қайта жазылғаннан кейін, егер әлі де кіріс жәшігіңізде хаттар көрінбесе, спам қалтасын тексеріңіз. Кейбір пошта провадерлері бұрынғы спам шағымдарын сақтап, хаттарды белгілеуін жалғастырады. Егер солай болса, соңғы ақпараттық бюллетеньді \"Спам емес\" деп белгілеңіз және оны негізгі кіріс жәшігіне жылжытыңыз.", diff --git a/ghost/i18n/locales/lt/portal.json b/ghost/i18n/locales/lt/portal.json index ec744782d66..a43ff5ce325 100644 --- a/ghost/i18n/locales/lt/portal.json +++ b/ghost/i18n/locales/lt/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Jei el. laiškus kaip šlamštą pažymėjote netyčia arba norite vėl juos gauti, galite iš naujo prenumeruoti naujienlaiškį spustelėdami mygtuką ankstesniame ekrane.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Jei prenumeratą nutrauksite dabar, vis dar galėsite ja naudotis iki {periodEnd}", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Jei turite įmonės ar vyriausybės el. pašto paskyrą, susisiekite su IT skyriumi ir paprašykite leisti gauti el. laiškus iš {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Jei norite vėl gauti el. laiškus, būtų geriausia patikrinti įvestą el. pašto adresą ir ankstesniame ekrane spustelėti prenumeruoti.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Jei negaunate el. paštu naujienlaiškio, kurį užsiprenumeravote, štai keli dalykai, kuriuos reikia patikrinti.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Jei atlikote visas šias patikras ir vis tiek negaunate el. laiškų, bandykite kreiptis pagalbos: {supportAddress}", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Reikia daugiau pagalbos? Susisiekite", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Naujienlaiškiai gali būti išjungti paskyroje dėl dviejų priežasčių: ankstesnis el. laiškas buvo pažymėtas kaip šlamštas arba bandymai išsiųsti el. laišką buvo nuolatos atmetami.", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Negaunate el. laiškų?", "Now check your email!": "Dabar patikrinkite savo el. paštą", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Jei užsiprenumeravę iš naujo nematote el. laiškų gautuosiuose, patikrinkite šlamšto aplanką. Kai kurie el. paslaugų teikėjai registruoja ankstesnius laiškų žymėjimus dėl šlamšto ir toliau juos žymi. Jei taip atsitiks, pažymėkite naujausią gautą laišką kaip „Ne šlamštą“, kad grąžintumėte jį į pagrindinių gautųjų sąrašą.", diff --git a/ghost/i18n/locales/lv/portal.json b/ghost/i18n/locales/lv/portal.json index 6cdc910fb86..335b06da427 100644 --- a/ghost/i18n/locales/lv/portal.json +++ b/ghost/i18n/locales/lv/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ja sūdzība par surogātpastu bija nejauša vai vēlaties atkal saņemt e-pastus, varat atkārtoti abonēt e-pastus, noklikšķinot uz pogas iepriekšējā ekrānā.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ja atcelsiet savu abonementu tagad, jums joprojām būs piekļuve līdz {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ja jums ir uzņēmuma vai valdības e-pasta konts, sazinieties ar savu IT nodaļu un lūdziet atļauju saņemt e-pasta ziņojumus no {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ja vēlaties atsākt saņemt e-pasta ziņojumus, labākā nākamā darbība ir pārbaudīt, vai jūsu e-pasta adresē nav problēmu, un pēc tam noklikšķiniet uz atkārtoti abonēt iepriekšējā ekrānā.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ja nesaņemat e-pasta biļetenu, kuru esat abonējis, šeit ir dažas lietas, kas jāpārbauda.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ja esat pabeidzis visas šīs pārbaudes un joprojām nesaņemat e-pasta ziņojumus, varat sazināties, lai saņemtu atbalstu, sazinoties ar {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Vai nepieciešama papildu palīdzība? Sazinieties ar atbalsta dienestu", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Informatīvos izdevumus jūsu kontā var atspējot divu iemeslu dēļ: iepriekšējais e-pasts tika atzīmēts kā mēstule vai mēģinājums nosūtīt e-pastu izraisīja neatgriezenisku kļūmi (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Nav neviena dalībnieka ar šo e-pasta adresi.", - "No member exists with this e-mail address. Please sign up first.": "Nav neviena dalībnieka ar šo e-pasta adresi. Lūdzu, vispirms pierakstieties.", + "No member exists with this email address.": "Nav neviena dalībnieka ar šo e-pasta adresi.", + "No member exists with this email address. Please sign up first.": "Nav neviena dalībnieka ar šo e-pasta adresi. Lūdzu, vispirms pierakstieties.", "Not receiving emails?": "Vai nesaņemat e-pastus?", "Now check your email!": "Tagad pārbaudiet savu e-pastu!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Ja pēc atkārtotas abonēšanas iesūtnē joprojām neredzat e-pasta ziņojumus, pārbaudiet surogātpasta mapi. Daži iesūtnes pakalpojumu sniedzēji reģistrē iepriekšējās surogātpasta sūdzības un turpinās atzīmēt e-pastus. Ja tā notiek, atzīmējiet jaunāko biļetenu kā “Nav mēstules”, lai pārvietotu to atpakaļ uz savu primāro iesūtni.", diff --git a/ghost/i18n/locales/mk/portal.json b/ghost/i18n/locales/mk/portal.json index 1e9a9d291e1..8c0f0e1c7f2 100644 --- a/ghost/i18n/locales/mk/portal.json +++ b/ghost/i18n/locales/mk/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ако поплаката за спам беше извршена несакајќи, или доколку сакате да добивате пораки повторно, можете повторно да се претплатите со кликнување на копчето на претходната страница.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ако ја откажете вашата претплата сега, ќе продолжите да имате пристап до {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ако имате службена или владина email сметка, контактирајте ги надлежните во вашиот ИТ оддел и побарајте им да ви овозможат примање на пораки од {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Доколку сакате да добивате пораки повторно, најдобри наредни чекори се да ја проверите вашата email адреса за евентуални проблеми и потоа претплатете се повторно на претходниот екран.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Доколку не добивате пораки од билтенот на кој сте се претплатиле, овие се неколку нешта кои можете да ги проверите.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Доколку сте ги завршиле сите овие проверки и сè уште не добивате пораки, контактирајте на {supportAddress} за да добиете подршка.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Ви треба помош? Контактирајте подршка", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Билтените можат да бидат оневозможени за вашата сметка поради две причини: претходна порака била обележана како спам, или обидот за исппраќање на порака резултирал со траен неуспех (отскокнување).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Не добивате пораки?", "Now check your email!": "Сега проверете ги пораките1", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Кога ќе се претплатите повторно, доколку сè уште не добивате пораки, проверте ја папката за спам. Некои сервиси чуваат записи од претходни поплаки за спам и продолжуваат да ги обележуваат пораките како такви. Ако ова се случи, обележете ја последната порака од билтенот дека не е спам и префрлете ја во главното поштенско сандаче.", diff --git a/ghost/i18n/locales/mn/portal.json b/ghost/i18n/locales/mn/portal.json index 2798328affa..a5b7f733756 100644 --- a/ghost/i18n/locales/mn/portal.json +++ b/ghost/i18n/locales/mn/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Хэрвээ спам гэсэн мэдэгдэл санаандгүй байсан, эсвэл та дахин имэйл хүлээн авч эхлэхийг хүсэж байгаа бол өмнөх дэлгэц дээрх товчлуурыг дарж имэйлд дахин бүртгүүлж болно.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Хэрвээ та одоо захиалгаа цуцалбал {periodEnd} хүртэл хандах эрхтэй хэвээр байна.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Хэрвээ танд корпорацийн эсвэл төрийн имэйл хаяг байгаа бол ИТ хэлтэстэйгээ холбогдоод {senderEmail}-с имэйл хүлээн авахыг зөвшөөрөхийг хүсээрэй.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Хэрвээ та дахин имэйл хүлээн авч эхлэхийг хүсэж байгаа бол бүртгэлтэй имэйл хаягаа шалгаад, дараа нь өмнөх дэлгэцээс дахин бүртгүүлэх товчийг дарна уу.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Хэрвээ та захиалсан имэйл товхимолоо хүлээж авахгүй байгаа бол дараах зүйлсийг шалгана уу.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Хэрвээ та эдгээр бүгдийг шалгасны дараа ч имэйл хүлээж авахгүй байвал {supportAddress}-д хандаж дэмжлэг авна уу.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Тусламж хэрэгтэй юу? Лавлахтай холбогдоно уу", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Таны бүртгэл дээрх товхимолууд хоёр шалтгаанаар идэвхгүй болсон байж болно: Өмнөх имэйлийг спам гэж тэмдэглэсэн, эсвэл имэйлийг илгээх оролдлого байнгын алдаа (баунс) гаргасан.", "Next payment": "", - "No member exists with this e-mail address.": "Энэ имэйл хаягтай гишүүн байхгүй байна.", - "No member exists with this e-mail address. Please sign up first.": "Энэ имэйл хаягтай гишүүн байхгүй байна. Эхлээд бүртгүүлнэ үү.", + "No member exists with this email address.": "Энэ имэйл хаягтай гишүүн байхгүй байна.", + "No member exists with this email address. Please sign up first.": "Энэ имэйл хаягтай гишүүн байхгүй байна. Эхлээд бүртгүүлнэ үү.", "Not receiving emails?": "Имэйл ирээгүй юу?", "Now check your email!": "Одоо имэйлээ шалгана уу!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Дахин бүртгүүлсний дараа, хэрэв та имэйлүүдийг инбоксдоо харахгүй байвал спам хавтсаа шалгана уу. Зарим имэйл үйлчилгээ үзүүлэгчид өмнөх спам тэмдэглэгээнүүдийг хадгалдаг бөгөөд имэйлүүдийг тэмдэглэсээр байна. Хэрэв ийм байдал үүсвэл, сүүлийн үеийн товхимолыг 'Спам биш' гэж тэмдэглэж үндсэн инбокс руугаа буцааж зөөнө үү.", diff --git a/ghost/i18n/locales/ms/portal.json b/ghost/i18n/locales/ms/portal.json index d64e019bc25..9cb4cbeaada 100644 --- a/ghost/i18n/locales/ms/portal.json +++ b/ghost/i18n/locales/ms/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Jika aduan spam itu tidak disengajakan, atau anda ingin mula menerima e-mel semula, anda boleh melanggan semula e-mel dengan mengklik butang pada skrin sebelumnya.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Jika anda membatalkan langganan anda sekarang, anda akan terus mendapat akses sehingga {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Jika anda mempunyai akaun e-mel korporat atau kerajaan, hubungi jabatan IT anda dan minta mereka membenarkan e-mel diterima daripada {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Jika anda ingin mula menerima e-mel semula, langkah terbaik seterusnya ialah menyemak alamat e-mel anda pada fail untuk sebarang isu dan kemudian klik langgan semula pada skrin sebelumnya.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Jika anda tidak menerima newsletter e-mel yang anda langgan, berikut adalah beberapa perkara untuk diperiksa.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Jika anda telah menyelesaikan semua semakan ini dan anda masih tidak menerima e-mel, anda boleh menghubungi untuk mendapatkan sokongan dengan menghubungi {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Perlukan bantuan lagi? Hubungi sokongan", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newsletter boleh dilumpuhkan pada akaun anda atas dua sebab: E-mel sebelumnya telah ditandakan sebagai spam atau percubaan menghantar e-mel mengakibatkan kegagalan kekal (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Tidak menerima e-mel?", "Now check your email!": "Semak e-mel anda sekarang!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Setelah melanggan semula, jika anda masih tidak melihat e-mel dalam peti masuk anda, semak folder spam anda. Sesetengah pembekal peti masuk menyimpan rekod aduan spam sebelumnya dan akan terus membenderakan e-mel. Jika ini berlaku, tandakan surat berita terkini sebagai 'Bukan spam' untuk mengalihkannya kembali ke peti masuk utama anda.", diff --git a/ghost/i18n/locales/nb/portal.json b/ghost/i18n/locales/nb/portal.json index 2a49b8c41b6..142e30694ce 100644 --- a/ghost/i18n/locales/nb/portal.json +++ b/ghost/i18n/locales/nb/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Hvis du merket som søppelpost ved et uhell eller vil begynne å motta e-poster igjen, kan du abonnere på nytt ved å klikke knappen på forrige skjerm.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Hvis du avslutter abonnementet ditt nå, vil du fortsatt ha tilgang til {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Hvis du har en bedrifts- eller offentlig e-post, kontakt IT-avdelingen og be dem godkjenne e-post fra {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Hvis du vil begynne å motta e-poster igjen, sjekk e-postadressen din og klikk abonner på nytt på forrige skjerm.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Hvis du ikke mottar e-posten du har abonnert på, er her noen ting å sjekke.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Hvis du har sjekket alt og fortsatt ikke mottar e-poster, kontakt {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Trenger du mer hjelp? Ta kontakt", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Nyhetsbrev kan bli deaktivert på kontoen din av to grunner: En tidligere e-post ble markert som søppelpost, eller forsøk på å sende e-post resulterte i en permanent feil (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Ingen medlem eksisterer med denne e-postadressen.", - "No member exists with this e-mail address. Please sign up first.": "Ingen medlem eksisterer med denne e-postadressen. Vennligst registrer deg først.", + "No member exists with this email address.": "Ingen medlem eksisterer med denne e-postadressen.", + "No member exists with this email address. Please sign up first.": "Ingen medlem eksisterer med denne e-postadressen. Vennligst registrer deg først.", "Not receiving emails?": "Mottar du ikke e-poster?", "Now check your email!": "Sjekk e-posten din nå!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Blir e-poster markert som søppelpost? Sjekk e-postmappen for søppelpost og merk som 'ikke søppel'.", diff --git a/ghost/i18n/locales/ne/portal.json b/ghost/i18n/locales/ne/portal.json index e1b2960b4ff..4cafe4f4c20 100644 --- a/ghost/i18n/locales/ne/portal.json +++ b/ghost/i18n/locales/ne/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "", @@ -120,8 +121,8 @@ "Need more help? Contact support": "", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "", "Now check your email!": "", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "", diff --git a/ghost/i18n/locales/nl/portal.json b/ghost/i18n/locales/nl/portal.json index 88ea5d89889..ac6b77a5266 100644 --- a/ghost/i18n/locales/nl/portal.json +++ b/ghost/i18n/locales/nl/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Als de spamklacht per ongeluk was, of als je weer e-mails wilt ontvangen, kun je je opnieuw abonneren door op de knop op het vorige scherm te klikken.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Als je nu opzegt, behoud je toegang tot {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Als je een zakelijk of overheidsmailaccount hebt, vraag je IT-afdeling om e-mails van {senderEmail} toe te staan.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Als je weer e-mails wilt ontvangen, controleer dan je opgeslagen e-mailadres en klik op de vorige pagina op opnieuw abonneren.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Als je de nieuwsbrief die je hebt geabonneerd niet ontvangt, zijn hier enkele dingen om te controleren.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Als je alle stappen hebt doorlopen en nog steeds geen e-mails ontvangt, kun je contact opnemen met {supportAddress} voor hulp.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Meer hulp nodig? Contacteer support", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Nieuwsbrieven kunnen om twee redenen zijn uitgeschakeld voor je account: een eerdere e-mail werd als spam gemarkeerd, of het verzenden van een e-mail resulteerde in een permanente fout (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Er bestaat geen lid met dit e-mailadres.", - "No member exists with this e-mail address. Please sign up first.": "Er bestaat geen lid met dit e-mailadres. Registreer je eerst.", + "No member exists with this email address.": "Er bestaat geen lid met dit e-mailadres.", + "No member exists with this email address. Please sign up first.": "Er bestaat geen lid met dit e-mailadres. Registreer je eerst.", "Not receiving emails?": "Ontvang je geen e-mails?", "Now check your email!": "Check nu je e-mail!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Als je opnieuw geabonneerd bent en je ziet nog steeds geen e-mails in je inbox, controleer dan je spammap. Sommige providers houden een register bij van eerdere spamklachten en blijven e-mails markeren. Markeer de nieuwste nieuwsbrief als 'Geen spam' om deze terug te plaatsen naar je hoofdmap.", diff --git a/ghost/i18n/locales/nn/portal.json b/ghost/i18n/locales/nn/portal.json index 5f10c01563f..892ca7e07e5 100644 --- a/ghost/i18n/locales/nn/portal.json +++ b/ghost/i18n/locales/nn/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Viss søppelpost-klagen var med eit uhell, eller du ønsker å byrja å få e-postar frå oss igjen, kan du abonnera på nyheitsbrev igjen ved å klikka knappen på førre skjerm.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Vis du avslutter abonnementet no, vil du framleis ha tilgang fram til {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Viss du har har e-post hos ein bedrift kan du spørra IT-avdelinga om dei kan tillata e-postar frå {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Viss du vil få e-postar igjen, er det enklaste å sjekka e-postadressa du har gitt oss for feil, og så abonnera igjen ved å klikka resubscribe på førre skjerm.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Viss du ikkje mottar nyheitsbrevet du har abonnert på, kan du prøva dette. ", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Viss du har fullført desse stega og framleis ikkje får nyheitsbrev, kan du ta kontakt med oss på {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Treng du meir hjelp? Ta kontakt med brukarstøtte", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Nyheitsbrev kan bli skrudd av for brukaren din av to grunner: Ein tidlegare e-post har blitt markert som spam. Eller så har eit forsøk på å senda ein e-post resultert i ein permanent feil.", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Får du ikkje e-postar?", "Now check your email!": "Sjekk e-posten din!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Sjekk spam-mappa di om du framleis ikkje ser e-postane etter å ha abonnert på ny. Nokon e-postleverandørar kan flagga e-postar som spam basert på tidlegare e-postar. Viss dette skjer, marker den siste du mottok i spam-mappa som 'ikkje spam' og flytt tilbake til innboksen din.", diff --git a/ghost/i18n/locales/pa/portal.json b/ghost/i18n/locales/pa/portal.json index 1aa48bd0c49..df6c0d3b5be 100644 --- a/ghost/i18n/locales/pa/portal.json +++ b/ghost/i18n/locales/pa/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "ਜੇਕਰ ਫਾਲਤੂ ਈਮੇਲ ਸਪੈਮ ਸ਼ਿਕਾਇਤ ਗਲਤੀ ਨਾਲ ਹੋਈ ਸੀ, ਜਾਂ ਤੁਸੀਂ ਦੁਬਾਰਾ ਈਮੇਲਾਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਪਿਛਲੀ ਸਕ੍ਰੀਨ 'ਤੇ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰਕੇ ਈਮੇਲਾਂ ਲਈ ਮੁੜ ਸਦੱਸਤਾ ਲੈ ਸਕਦੇ ਹੋ।", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "ਜੇਕਰ ਤੁਸੀਂ ਹੁਣ ਆਪਣੀ ਸਦੱਸਤਾ ਰੱਦ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡੇ ਕੋਲ {periodEnd} ਤੱਕ ਪਹੁੰਚ ਜਾਰੀ ਰਹੇਗੀ।", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "ਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਕਾਰਪੋਰੇਟ ਜਾਂ ਸਰਕਾਰੀ ਈਮੇਲ ਖਾਤਾ ਹੈ, ਤਾਂ ਆਪਣੇ IT ਵਿਭਾਗ ਨਾਲ ਸੰਪਰਕ ਕਰੋ ਅਤੇ ਉਹਨਾਂ ਨੂੰ {senderEmail} ਤੋਂ ਈਮੇਲਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਲਈ ਕਹੋ।", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "ਜੇਕਰ ਤੁਸੀਂ ਦੁਬਾਰਾ ਈਮੇਲਾਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਸਭ ਤੋਂ ਵਧੀਆ ਅਗਲੇ ਕਦਮ ਹਨ ਕਿ ਕਿਸੇ ਵੀ ਮੁੱਦੇ ਲਈ ਫਾਈਲ 'ਤੇ ਆਪਣੇ ਈਮੇਲ ਪਤੇ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਫਿਰ ਪਿਛਲੀ ਸਕ੍ਰੀਨ 'ਤੇ ਮੁੜ ਸਦੱਸਤਾ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "ਜੇਕਰ ਤੁਹਾਨੂੰ ਉਹ ਈਮੇਲ ਖ਼ਬਰਨਾਮਾ ਨਹੀਂ ਮਿਲ ਰਿਹਾ ਜਿਸਦੀ ਤੁਸੀਂ ਸਦੱਸਤਾ ਲਈ ਹੈ, ਤਾਂ ਇੱਥੇ ਕੁਝ ਚੀਜ਼ਾਂ ਹਨ ਜਿਨ੍ਹਾਂ ਦੀ ਜਾਂਚ ਕਰਨੀ ਹੈ।", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "ਜੇਕਰ ਤੁਸੀਂ ਇਹ ਸਾਰੀਆਂ ਜਾਂਚਾਂ ਪੂਰੀਆਂ ਕਰ ਲਈਆਂ ਹਨ ਅਤੇ ਤੁਹਾਨੂੰ ਅਜੇ ਵੀ ਈਮੇਲਾਂ ਨਹੀਂ ਮਿਲ ਰਹੀਆਂ, ਤਾਂ ਤੁਸੀਂ {supportAddress} 'ਤੇ ਸੰਪਰਕ ਕਰਕੇ ਸਹਾਇਤਾ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ।", @@ -120,8 +121,8 @@ "Need more help? Contact support": "ਹੋਰ ਮਦਦ ਦੀ ਲੋੜ ਹੈ? ਸਹਾਇਤਾ ਨਾਲ ਸੰਪਰਕ ਕਰੋ", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "ਤੁਹਾਡੇ ਖਾਤੇ 'ਤੇ ਨਿਊਜ਼ਲੈਟਰ ਦੋ ਕਾਰਨਾਂ ਕਰਕੇ ਅਸਮਰੱਥ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ: ਪਿਛਲੀ ਈਮੇਲ ਨੂੰ ਸਪੈਮ ਵਜੋਂ ਮਾਰਕ ਕੀਤਾ ਗਿਆ ਸੀ, ਜਾਂ ਈਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਸਥਾਈ ਅਸਫਲਤਾ (ਬਾਊਂਸ) ਹੋਈ ਸੀ।", "Next payment": "", - "No member exists with this e-mail address.": "ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ ਕੋਈ ਮੈਂਬਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।", - "No member exists with this e-mail address. Please sign up first.": "ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ ਕੋਈ ਮੈਂਬਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਪਹਿਲਾਂ ਸਾਈਨ ਅੱਪ ਕਰੋ।", + "No member exists with this email address.": "ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ ਕੋਈ ਮੈਂਬਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।", + "No member exists with this email address. Please sign up first.": "ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ ਕੋਈ ਮੈਂਬਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਪਹਿਲਾਂ ਸਾਈਨ ਅੱਪ ਕਰੋ।", "Not receiving emails?": "ਈਮੇਲਾਂ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋ ਰਹੀਆਂ?", "Now check your email!": "ਹੁਣ ਆਪਣੀ ਈਮੇਲ ਚੈੱਕ ਕਰੋ!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "ਮੁੜ ਸਦੱਸਤਾ ਲੈਣ ਤੋਂ ਬਾਅਦ, ਜੇਕਰ ਤੁਹਾਨੂੰ ਅਜੇ ਵੀ ਆਪਣੇ ਇਨਬਾਕਸ ਵਿੱਚ ਈਮੇਲਾਂ ਨਹੀਂ ਦਿਸਦੀਆਂ, ਤਾਂ ਆਪਣਾ ਸਪੈਮ ਫੋਲਡਰ ਚੈੱਕ ਕਰੋ। ਕੁਝ ਇਨਬਾਕਸ ਪ੍ਰਦਾਤਾ ਪਿਛਲੀਆਂ ਸਪੈਮ ਸ਼ਿਕਾਇਤਾਂ ਦਾ ਰਿਕਾਰਡ ਰੱਖਦੇ ਹਨ ਅਤੇ ਈਮੇਲਾਂ ਨੂੰ ਫਲੈਗ ਕਰਨਾ ਜਾਰੀ ਰੱਖਣਗੇ। ਜੇਕਰ ਅਜਿਹਾ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਨਵੀਨਤਮ ਨਿਊਜ਼ਲੈਟਰ ਨੂੰ 'ਸਪੈਮ ਨਹੀਂ' ਵਜੋਂ ਮਾਰਕ ਕਰੋ ਤਾਂ ਜੋ ਇਸਨੂੰ ਤੁਹਾਡੇ ਪ੍ਰਾਇਮਰੀ ਇਨਬਾਕਸ ਵਿੱਚ ਵਾਪਸ ਭੇਜਿਆ ਜਾ ਸਕੇ।", diff --git a/ghost/i18n/locales/pl/portal.json b/ghost/i18n/locales/pl/portal.json index ac0c22305cb..c3b9e88b1ff 100644 --- a/ghost/i18n/locales/pl/portal.json +++ b/ghost/i18n/locales/pl/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Jeśli skarga dotycząca spamu była przypadkowa lub chcesz ponownie zacząć otrzymywać wiadomości, możesz raz jeszcze zasubskrybować, klikając przycisk na poprzednim ekranie.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Jeśli anulujesz subskrypcję teraz, będziesz mieć do niej dostęp do {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Jeśli masz firmowy adres e-mail lub konto w domenie publicznej, skontaktuj się z działem IT i poproś o zezwolenie na odbieranie wiadomości od {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Jeśli chcesz ponownie zacząć otrzymywać wiadomości, najlepiej sprawdź poprawność swojego adres email, a następnie kliknij przycisk ponownej subskrypcji na poprzednim ekranie.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Jeśli nie otrzymujesz subskrybowanego newslettera, oto kilka rzeczy do sprawdzenia.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Jeśli wykonałeś wszystkie te czynności i nadal nie otrzymujesz wiadomości, możesz skontaktować się z pomocą techniczną pod tym adresem {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Potrzebujesz pomocy? Skontaktuj się z pomocą techniczną", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newslettery mogą zostać wyłączone na Twoim koncie z dwóch powodów: poprzedni email został oznaczony jako spam lub próba wysłania wiadomości zakończyła się niepowodzeniem (odesłaniem).", "Next payment": "", - "No member exists with this e-mail address.": "Nie istnieje żaden użytkownik o tym adresie e-mail.", - "No member exists with this e-mail address. Please sign up first.": "Żaden członek nie istnieje z tym adresem e-mail. Proszę się najpierw zarejestrować.", + "No member exists with this email address.": "Nie istnieje żaden użytkownik o tym adresie e-mail.", + "No member exists with this email address. Please sign up first.": "Żaden członek nie istnieje z tym adresem e-mail. Proszę się najpierw zarejestrować.", "Not receiving emails?": "Nie dostajesz emaili?", "Now check your email!": "Teraz sprawdź swoją pocztę!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Po ponownym zapisaniu się, jeśli nadal nie widzisz wiadomości e-mail w skrzynce odbiorczej, sprawdź folder ze spamem. Niektórzy dostawcy skrzynek odbiorczych przechowują rejestr poprzednich skarg na spam i będą nadal oznaczać wiadomości e-mail flagami. Jeśli tak się stanie, oznacz najnowszy newsletter jako „To nie jest spam”, aby przenieść go z powrotem do głównej skrzynki odbiorczej.", diff --git a/ghost/i18n/locales/pt-BR/portal.json b/ghost/i18n/locales/pt-BR/portal.json index 954e35553d1..ac8e18d5a0e 100644 --- a/ghost/i18n/locales/pt-BR/portal.json +++ b/ghost/i18n/locales/pt-BR/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Se a reclamação de spam foi acidental ou se você deseja começar a receber e-mails novamente, pode se inscrever novamente para receber e-mails clicando no botão na tela anterior.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Se você cancelar sua assinatura agora, continuará tendo acesso até {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Se você tiver uma conta de e-mail corporativa ou governamental, entre em contato com o departamento de TI e peça para permitir que os e-mails sejam recebidos de {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Se você deseja começar a receber e-mails novamente, os próximos passos são verificar seu endereço de e-mail no arquivo para verificar se há problemas e, em seguida, clicar em se inscrever novamente na tela anterior.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Se você não estiver recebendo a newsletter por e-mail à qual se inscreveu, verifique algumas coisas.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Se você concluiu todas essas verificações e ainda não está recebendo e-mails, pode entrar em contato para obter suporte entrando em contato com {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Precisa de mais ajuda? Contate o suporte", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "As newsletters podem ser desativadas na sua conta por dois motivos: Um e-mail anterior foi marcado como spam ou a tentativa de enviar um e-mail resultou em uma falha permanente (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Não existe nenhum membro com este endereço de e-mail.", - "No member exists with this e-mail address. Please sign up first.": "Não encontramos nenhum membro com este endereço de e-mail. Faça seu cadastro primeiro.", + "No member exists with this email address.": "Não existe nenhum membro com este endereço de e-mail.", + "No member exists with this email address. Please sign up first.": "Não encontramos nenhum membro com este endereço de e-mail. Faça seu cadastro primeiro.", "Not receiving emails?": "Não está recebendo e-mails?", "Now check your email!": "Agora confira seu e-mail!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Depois de se inscrever novamente, se você ainda não vir e-mails na sua caixa de entrada, verifique sua pasta de spam. Alguns provedores de caixa de entrada mantêm um registro de reclamações anteriores de spam e continuarão a sinalizar e-mails. Se isso acontecer, marque a newsletter mais recente como 'Não é spam' para movê-la de volta para sua caixa de entrada principal.", diff --git a/ghost/i18n/locales/pt/portal.json b/ghost/i18n/locales/pt/portal.json index c4bc4d9f5fa..691733f90ee 100644 --- a/ghost/i18n/locales/pt/portal.json +++ b/ghost/i18n/locales/pt/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Se a queixa de spam foi acidental, ou se gostaria de começar a receber emails novamente, pode voltar a subscrever os emails clicando no botão no ecrã anterior.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Se cancelar a sua subscrição agora, continuará a ter acesso até {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Se tem uma conta de email corporativa ou governamental, contacte o seu departamento de TI e peça-lhes para permitir a receção de emails de {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Se gostaria de começar a receber emails novamente, os próximos passos são verificar o seu endereço de email registado para verificar se há algum problema e, em seguida, clicar para voltar a subscrever no ecrã anterior.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Se não está a receber a newsletter por email que subscreveu, aqui estão algumas questões a verificar.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Se completou todas estas verificações e ainda não está a receber emails, envie um email para {supportAddress} para obter apoio.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Precisa de mais ajuda? Entre em contacto com o suporte", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "As newsletters podem ser desativadas na sua conta por dois motivos: um email anterior foi marcado como spam, ou a tentativa de enviar um email resultou numa falha permanente (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Não está a receber emails?", "Now check your email!": "Verifica o teu email agora!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Se depois de ser inscrever novamente, os emails não chegaram à sua caixa de entrada, verifique por favor a sua pasta de spam. Alguns provedores de mail têm disponível um registro de reclamações anteriores de spam e continuarão a sinalizar emails. Se isso acontecer, marque a newsletter mais recente como 'Não é spam' para movê-la de volta para sua caixa de entrada principal.", diff --git a/ghost/i18n/locales/ro/portal.json b/ghost/i18n/locales/ro/portal.json index 1f95b7bb412..b3a3968996e 100644 --- a/ghost/i18n/locales/ro/portal.json +++ b/ghost/i18n/locales/ro/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Dacă sesizarea privind spam-ul a fost accidentală, sau doriți să începeți din nou să primiți emailuri, vă puteți reabona la emailuri făcând clic pe butonul de pe ecranul anterior.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Dacă anulați abonamentul acum, veți continua să aveți acces până la {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Dacă aveți un cont de email corporativ sau guvernamental, contactați departamentul IT și cereți-le să permită primirea emailurilor de la {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Dacă doriți să începeți să primiți din nou emailuri, cei mai buni pași următori sunt să verificați adresa dvs. de email din fișiere pentru orice probleme și apoi să faceți clic pe reabonare pe ecranul anterior.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Dacă nu primiți buletinul informativ pe email la care v-ați abonat, iată câteva lucruri de verificat.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Dacă ați completat toate aceste verificări și încă nu primiți emailuri, puteți solicita suport contactând {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Aveți nevoie de mai mult ajutor? Contactați suportul", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Buletinele informative pot fi dezactivate pe contul dvs. din două motive: Un email anterior a fost marcat ca spam, sau încercarea de a trimite un email a rezultat într-o eroare permanentă (respins).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Nu primești emailuri?", "Now check your email!": "Acum verifică-ți emailul!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Odată reabonat, dacă încă nu vedeți emailuri în inbox, verificați dosarul de spam. Unii furnizori de inbox păstrează un istoric al sesizărilor de spam anterioare și vor continua să marcheze emailurile. Dacă se întâmplă acest lucru, marcați cel mai recent buletin informativ ca 'Nu este spam' pentru a-l muta înapoi în inbox-ul primar.", diff --git a/ghost/i18n/locales/ru/portal.json b/ghost/i18n/locales/ru/portal.json index 162ab96f8ed..e1ec4e925ec 100644 --- a/ghost/i18n/locales/ru/portal.json +++ b/ghost/i18n/locales/ru/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Если жалоба на спам была случайной или вы хотите снова получать рассылку, вы можете повторно подписаться на рассылку, нажав на кнопку «Подписаться повторно» на предыдущем экране.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Если вы отмените подписку сейчас, доступ к содержимому сохранится у вас до {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Если вы указали корпоративный или принадлежащий государственным органам адрес электронной почты, обратитесь в свой ИТ-отдел и попросите разрешить получать электронные письма от {senderEmail}.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Если вы хотите снова получать электронные письма, лучшим следующим шагом будет проверить ваш email адрес на наличие проблем, а затем нажать кнопку «Подписаться повторно» на предыдущем экране.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Если вы не получаете рассылку, на которую подписаны, вот несколько вещей, которые следует проверить.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Если вы выполнили все эти проверки, но по-прежнему не получаете электронные письма, вы можете обратиться за поддержкой по адресу: {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Нужна дополнительная помощь? Обратитесь в службу поддержки", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Рассылка могла быть отключена в вашей учётной записи (для вашего email адреса) по двум причинам: предыдущее электронное письмо было помечено как спам или попытка отправки приводила к постоянной ошибке (например: авто-возврату).", "Next payment": "", - "No member exists with this e-mail address.": "Участника с таким email адресом не существует.", - "No member exists with this e-mail address. Please sign up first.": "Участника с таким email адресом не существует. Пожалуйста, зарегистрируйтесь сначала.", + "No member exists with this email address.": "Участника с таким email адресом не существует.", + "No member exists with this email address. Please sign up first.": "Участника с таким email адресом не существует. Пожалуйста, зарегистрируйтесь сначала.", "Not receiving emails?": "Не получаете письма?", "Now check your email!": "Теперь проверьте свою электронную почту!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Если после повторной подписки вы всё ещё не видите писем в своём почтовом ящике, проверьте папку со спамом. Некоторые провайдеры электронной почты сохраняют записи предыдущих жалоб на спам и продолжают помечать письма как спам. Если именно это и происходит, отметьте последнюю рассылку как «Не спам», чтобы переместить письмо обратно в основную папку входящих писем вашего почтового ящика.", diff --git a/ghost/i18n/locales/si/portal.json b/ghost/i18n/locales/si/portal.json index c977ba3e218..cf7837ab71f 100644 --- a/ghost/i18n/locales/si/portal.json +++ b/ghost/i18n/locales/si/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Spam සඳහා කළ පැමිණිල්ල අත්වැරදීමකින් සිදු වූවක් හෝ, ඔබ නැවතත් emails ලබාගැනීමට කැමැත්තෙන් සිටින්නේ නම්, පෙර screen එකේ ඇති button එක හරහා emails වලට නැවත subscribe කිරීමේ හැකියාව ඇත.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "ඔබගේ subscription එක මෙම මොහොතේ cancel කළහොත්, {periodEnd} දක්වා ඔබ\u200dගේ access නොවෙනස්ව පවතිනු ඇත.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "ඔබ ව්\u200dයාපාරික හෝ රාජ්\u200dයය email ලිපිනයක් භාවිතා කරන්නේ නම්, {senderEmail} ලිපිනයෙන් එන emails allow කරන ලෙස ඔබගේ IT department එකට දැනුම් දීමට කටයුතු කරන්න.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "ඔබ නැවත emails ලබාගැනීමට කැමති නම්, වඩාත්ම සුදුසු මීළඟ පියවර වන්නේ \u200dඔබ භාවිතා කරන email ලිපිනයෙහි යම්කිසි ගැටළුවක් ඇත්දැයි පරීක්ෂා කිරීමෙන් අනතුරුව, පෙර screen එක හරහා resubscribe මත click කිරීමයි.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "ඔබ subscribe කළ newsletters ඔබට නොලැබෙන්නේ නම්, මේ දේවල් පරීක්ෂා කර බලන්න.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "මෙහි සඳහන් සියළුම දේ පරීක්ෂා කිරීමෙන් අනතුරුවත් ඔබට emails නොලැබෙන්නේ නම්, {supportAddress} සම්බන්ධ කරගනිමින් සහාය ඉල්ලා සිටින්න.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "තවදුරටත් සහාය අවශ්\u200dයයි ද? සහායක සේවාව සම්බන්ධ කරගන්න", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "ඔබගේ ගිණුමෙහි newsletters අක්\u200dරීය වීමට හේතු දෙකක් දැක්විය හැකිය: පෙර යවන ලද email එකක් spam ලෙස සටහන් කිරීම, හෝ email එකක් යැවීමට උත්සාහ කිරීමේදී permenent faulure (bounce) එකක් වීමක් වාර්ථා වීම.", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Emails ලැබෙන්නේ නැද්ද?", "Now check your email!": "දැන් ඔබගේ email එක පරික්ෂා කරන්න!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "නැවත subscribe කළ විටත් ඔබගේ inbox එකට email ලැබෙන්නේ නැතිනම්, spam folder එක පරීක්ෂා කරන්න. ඇතැම් සේවා සපයන්නන් මීට පෙර spam සම්බන්ධව ලැබුණු පැමිණිලි පාදක කරගෙන තවදුරටත් emails spam ලෙස ලකුණු කරනු ලබනවා. එසේ වී ඇත්නම්, අලුතින්ම ලැබුණු newsletter එක ඔබගේ primary inbox එකට යැවීමට 'Not spam' ලෙස සළකුනු කරන්න.", diff --git a/ghost/i18n/locales/sk/portal.json b/ghost/i18n/locales/sk/portal.json index 8f155a41a96..aa0d20a8f27 100644 --- a/ghost/i18n/locales/sk/portal.json +++ b/ghost/i18n/locales/sk/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ak bola sťažnosť na nevyžiadanú poštu náhodná alebo ak chcete opäť začať dostávať e-maily, môžete sa k odberu e-mailov opätovne prihlásiť kliknutím na tlačidlo na predchádzajúcej obrazovke.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ak teraz zrušíte svoje predplatné, budete mať prístup až do {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ak máte firemné alebo štátne e-mailové konto, obráťte sa na svoje IT oddelenie a požiadajte ho, aby povolilo prijímanie e-mailov z adresy {senderEmail}.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ak chcete opäť začať dostávať e-maily, najlepšie je skontrolovať, či vaša e-mailová adresa v súbore neobsahuje nejaké problémy, a potom kliknúť na možnosť opätovného prihlásenia na predchádzajúcej obrazovke.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ak nedostávate newsletter, ku ktorému ste sa prihlásili, tu je niekoľko vecí, ktoré treba skontrolovať.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ak ste vykonali všetky kontroly a stále nedostávate e-maily, môžete sa obrátiť na podporu a kontaktovať {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Potrebujete pomoc? Kontaktujte podporu", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newsletter môže byť na vašom účte zakázaný z dvoch dôvodov: Predchádzajúci e-mail bol označený ako spam alebo pokus o odoslanie e-mailu viedol k trvalému zlyhaniu (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "Používateľ s danou emailovou adresou neexistuje.", - "No member exists with this e-mail address. Please sign up first.": "Používateľ s danou emailovou adresou neexistuje. Prosím zaregistrujte sa najprv.", + "No member exists with this email address.": "Používateľ s danou emailovou adresou neexistuje.", + "No member exists with this email address. Please sign up first.": "Používateľ s danou emailovou adresou neexistuje. Prosím zaregistrujte sa najprv.", "Not receiving emails?": "Nedostávate e-maily?", "Now check your email!": "Skontrolujte svoju emailovú schránku!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Ak po opätovnom prihlásení stále nevidíte e-maily v doručenej pošte, skontrolujte priečinok so spamom. Niektorí poskytovatelia schránok uchovávajú záznamy o predchádzajúcich sťažnostiach na nevyžiadanú poštu a budú naďalej označovať e-maily. Ak sa tak stane, označte najnovší newsletter ako „Nie je spam“, aby ste ho presunuli späť do primárnej schránky.", diff --git a/ghost/i18n/locales/sl/portal.json b/ghost/i18n/locales/sl/portal.json index f4ab1d7f253..da56efdadb2 100644 --- a/ghost/i18n/locales/sl/portal.json +++ b/ghost/i18n/locales/sl/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Če je bila pritožba zaradi vsiljene pošte naključna ali želite ponovno prejemati e-pošto, se lahko ponovno prijavite na e-pošto z gumbom na prejšnjem zaslonu.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Če zdaj prekličete naročnino, boste imeli še vedno dostop do {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Če imate poslovni ali vladni e-poštni račun, se obrnite na svoj IT oddelek in jih prosite, naj omogočijo prejemanje e-pošte iz {senderEmail}.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Če želite ponovno prejemati e-pošto, so najboljši naslednji koraki, da preverite svoj e-poštni naslov za morebitne težave in se nato ponovno naročite na prejšnjem zaslonu.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Če ne prejemate novic, na katere ste se naročili, je tukaj nekaj stvari, ki jih preverite.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Če ste izvedli vse te preglede in še vedno ne prejemate e-pošte, se lahko obrnete na podporo prek {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Potrebujete več pomoči? Obrnite se na podporo", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "E-poštne novice so na vašem računu lahko onemogočene iz dveh razlogov: prejšnja e-pošta je bila označeno kot vsiljena pošta ali pa je pri pošiljanju e-pošte prišlo do trajne napake (odboj).", "Next payment": "", - "No member exists with this e-mail address.": "Član s tem e-poštnim naslovom ne obstaja.", - "No member exists with this e-mail address. Please sign up first.": "Član s tem e-poštnim naslovom ne obstaja. Prosimo, da se najprej prijavite.", + "No member exists with this email address.": "Član s tem e-poštnim naslovom ne obstaja.", + "No member exists with this email address. Please sign up first.": "Član s tem e-poštnim naslovom ne obstaja. Prosimo, da se najprej prijavite.", "Not receiving emails?": "Ne prejemate e-pošte", "Now check your email!": "Preverite svojo e-pošto!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Ko boste ponovno naročeni in še vedno ne vidite e-pošte v svoji mapi Prejeto, preverite mapo za vsiljeno pošto. Nekateri ponudniki hranijo zgodovino prejšnjih pritožb zaradi vsiljene pošte in bodo še naprej označevali e-pošto. Če se to zgodi, označite najnovejše novice kot 'Ni vsiljena pošta', da jih premaknete nazaj v svojo glavno mapo Prejeto.", diff --git a/ghost/i18n/locales/sq/portal.json b/ghost/i18n/locales/sq/portal.json index 184e9b9732e..866f8d1f7aa 100644 --- a/ghost/i18n/locales/sq/portal.json +++ b/ghost/i18n/locales/sq/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Nëse ankesa për postën e padëshiruar ishte aksidentale, ose dëshironi të filloni të merrni përsëri email, mund të regjistroheni përsëri në email duke klikuar butonin në ekranin e mëparshëm.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Nëse e anuloni abonimin tuaj tani, do të vazhdoni të keni akses deri në {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Nëse keni një llogari të postës elektronike të korporatës ose të qeverisë, kontaktoni departamentin tuaj të IT dhe kërkojuni që të lejojnë marrjen e emaileve nga {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Nëse dëshironi të filloni të merrni përsëri emaile, hapat më të mirë të metejshem janë të kontrolloni adresën tuaj të emailit në dosje për ndonjë problem dhe më pas klikoni Ri-abonohu në ekranin e mëparshëm.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Nëse nuk po merrni buletinin me email në të cilin jeni abonuar, këtu janë disa gjëra për të kontrolluar.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Nëse i keni përfunduar të gjitha këto kontrolle dhe ende nuk po merrni email, mund të kontaktoni për të marrë mbështetje duke kontaktuar {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Te duhet me shume ndihme? Kontakto suportin", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Buletinet mund të çaktivizohen në llogarinë tuaj për dy arsye: Një email i mëparshëm u shënua si i padëshiruar, ose përpjekja për të dërguar një email rezultoi në një dështim të përhershëm (kercim).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Nuk po merr emaile?", "Now check your email!": "Kontrollo emailin tend tani!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Pasi të regjistroheni përsëri, nëse ende nuk i shihni emailet në kutinë tuaj hyrëse, kontrolloni dosjen tuaj të postës së padëshiruar. Disa ofrues të kutisë hyrëse mbajnë një regjistër të ankesave të mëparshme të postës së padëshiruar dhe do të vazhdojnë të raportojnë emailet. Nëse kjo ndodh, shëno buletinin më të fundit si 'Jo e padëshiruar' për ta zhvendosur atë në kutinë hyrëse kryesore.", diff --git a/ghost/i18n/locales/sr-Cyrl/portal.json b/ghost/i18n/locales/sr-Cyrl/portal.json index d78f20bd765..bfe4a8e80a9 100644 --- a/ghost/i18n/locales/sr-Cyrl/portal.json +++ b/ghost/i18n/locales/sr-Cyrl/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ако је жалба за нежељену пошту била случајна или желите поново да примате мејлове, можете се поново претплатити кликом на дугме на претходном екрану.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ако сада откажете претплату, и даље ћете имати приступ до {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ако имате корпоративни или владин мејл налог, обратите се свом ИТ одељењу и замолите их да дозволе примање мејлова од {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ако желите поново да примате мејлове, најбољи наредни кораци су да проверите адресу мејла у датотеци за било какве проблеме и потом кликнете на поновну претплату на претходном екрану.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ако не примате мејл билтен на који сте се претплатили, ево неколико ствари које треба проверити.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ако сте завршили све ове провере и још увек не примате мејлове, можете затражити помоћ контактирањем {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Треба вам више помоћи? Контактирајте подршку", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Билтени могу бити онемогућени на вашем налогу из два разлога: претходни мејл је означен као нежељена пошта или је покушај слања мејла резултирао трајним неуспехом (одбијен мејл).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Не примате мејлове?", "Now check your email!": "Сада проверите свој мејл!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Када се поново претплатите, ако и даље не видите мејлове у свом сандучету, проверите фасциклу за нежељену пошту. Неки провајдери сандучића чувају записе о претходним жалбама на нежељену пошту и наставиће да означавају мејлове. Ако се то деси, означите најновији билтен као 'Није нежељено' да га преместите назад у своје примарно сандуче.", diff --git a/ghost/i18n/locales/sr/portal.json b/ghost/i18n/locales/sr/portal.json index 4f3b0aae5d4..080cbeb33ee 100644 --- a/ghost/i18n/locales/sr/portal.json +++ b/ghost/i18n/locales/sr/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ako je primedba za nepoželjne poruke bila slučajna, ili ako želite da ponovo počnete da primate imejlove, možete te se opet pretplatiti na imejlove klikom na dugme na prethodnom ekranu.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ako otkažete svoju pretplatu sada, imaćete pristup do {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ako imate korporativni ili državni imejl nalog, kontaktirajte svoju IT službu i pitajte ih da dozvole primanje imejlove sa {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ako želite da ponovo počnete da primate imejlove, najbolji naredni korak je da proverite da li postoje problemi sa Vašom imejl adresom i onda kliknete dugme za ponovnu pretplatu na prethodnom ekranu.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ako ne stižu imejlovi sa biltena na koji ste pretplaćeni, evo par stvari koje treba da proverite.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ako ste proverili sve ovo i mejlovi i dalje ne stižu, možete kontaktirati podršku {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Potrebna Vam je pomoć? Kontaktirajte podršku", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Ne dobijate e-poštu?", "Now check your email!": "Proverite svoj imejl!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "", diff --git a/ghost/i18n/locales/sv/portal.json b/ghost/i18n/locales/sv/portal.json index e6efc243eb0..a16363e798e 100644 --- a/ghost/i18n/locales/sv/portal.json +++ b/ghost/i18n/locales/sv/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Om nyhetsbrevet av misstag markerades som skräppost och du vill återuppta utskicken kan du aktivera nyhetsbrevet på föregående sida.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Om du säger upp prenumerationen nu kommer du att ha tillgång till {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Om din organisations e-postlösning blockerar utskicken kan du be administratören att tillåta e-post från adressen {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Om du vill börja ta emot utskicken igen, verifiera att du angett korrekt e-postadress och sedan klickar du på återaktivera utskick på förra sidan.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Om du inte får e-postutskicken från oss finns det några saker du kan göra.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Om det fortfarande inte fungerar efter att du undersökt allt kan du kontakta oss på {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Behöver du mer hjälp? Kontakta administratören.", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Nyhetsbrev kan inaktiveras på ditt konto av två anledningar: ett tidigare utskick markerades som spam, eller ett försök att skicka ett e-postmeddelande resulterade i ett permanent fel.", "Next payment": "", - "No member exists with this e-mail address.": "Ingen medlem existerar med den här e-postadressen.", - "No member exists with this e-mail address. Please sign up first.": "Ingen medlem existerar med den här e-postadressen. Vänligen skapa konto först.", + "No member exists with this email address.": "Ingen medlem existerar med den här e-postadressen.", + "No member exists with this email address. Please sign up first.": "Ingen medlem existerar med den här e-postadressen. Vänligen skapa konto först.", "Not receiving emails?": "Får du inga e-postmeddelanden?", "Now check your email!": "Kolla nu din e-post!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Om du fortfarande inte ser e-post i din inkorg efter att du återaktiverat utskicken, kontrollera din skräppostmapp. Vissa e-postleverantörer behåller en historik över tidigare spamklagomål och fortsätter att markera e-post som spam. Om detta händer, markera det senaste nyhetsbrevet som 'Inte spam' för att flytta tillbaka det till din huvudsakliga inkorg.", diff --git a/ghost/i18n/locales/sw/portal.json b/ghost/i18n/locales/sw/portal.json index b0f2c28db32..4fc092b1db9 100644 --- a/ghost/i18n/locales/sw/portal.json +++ b/ghost/i18n/locales/sw/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Ikiwa malalamiko ya spam yalikuwa ya bahati mbaya, au ungependa kuanza kupokea barua pepe tena, unaweza kujiandikisha tena kwa barua pepe kwa kubofya kitufe kwenye skrini iliyopita.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Ikiwa utaghairi usajili wako sasa, utaendelea kupata huduma hadi {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Ikiwa una akaunti ya barua pepe ya kampuni au serikali, wasiliana na idara yako ya IT na uwaombe waruhusu kupokea barua pepe kutoka {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Ikiwa ungependa kuanza kupokea barua pepe tena, hatua bora zinazofuata ni kukagua anwani yako ya barua pepe kwa ajili ya matatizo yoyote kisha ubofye jiandikishe tena kwenye skrini iliyopita.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Ikiwa hupokei jarida la barua pepe ulilojiandikisha nalo, hapa kuna mambo machache ya kukagua.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Ikiwa umekamilisha ukaguzi huu wote na bado hupokei barua pepe, unaweza kupata usaidizi kwa kuwasiliana na {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Unahitaji msaada zaidi? Wasiliana na usaidizi", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Majarida yanaweza kuzimwa kwenye akaunti yako kwa sababu mbili: Barua pepe ya awali iliyowekwa alama kama spam, au jaribio la kutuma barua pepe lilisababisha hitilafu ya kudumu (bounce).", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Hupokei barua pepe?", "Now check your email!": "Sasa angalia barua pepe yako!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Mara baada ya kujiandikisha tena, ikiwa bado huoni barua pepe kwenye kikasha chako, kagua folda yako ya spam. Watoa huduma wengine wa kikasha huweka rekodi ya malalamiko ya awali ya spam na wataendelea kuweka alama kwenye barua pepe. Ikiwa hili litatokea, weka alama kwenye jarida la hivi karibuni kama 'Si spam' ili kuirudisha kwenye kikasha chako kikuu.", diff --git a/ghost/i18n/locales/ta/portal.json b/ghost/i18n/locales/ta/portal.json index 52182bb9ae1..2811cbd6e2a 100644 --- a/ghost/i18n/locales/ta/portal.json +++ b/ghost/i18n/locales/ta/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "ஸ்பாம் புகார் தற்செயலாக இருந்தால், அல்லது நீங்கள் மீண்டும் மின்னஞ்சல்களைப் பெற விரும்பினால், முந்தைய திரையில் உள்ள பொத்தானைக் கிளிக் செய்வதன் மூலம் மின்னஞ்சல்களுக்கு மீண்டும் சந்தா செய்யலாம்.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "நீங்கள் இப்போது உங்கள் சந்தாவை ரத்து செய்தால், {periodEnd} வரை தொடர்ந்து அணுகல் இருக்கும்.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "உங்களிடம் கார்ப்பரேட் அல்லது அரசு மின்னஞ்சல் கணக்கு இருந்தால், உங்கள் IT துறையை தொடர்பு கொண்டு {senderEmail} இலிருந்து மின்னஞ்சல்களைப் பெற அனுமதிக்குமாறு கேளுங்கள்", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "நீங்கள் மீண்டும் மின்னஞ்சல்களைப் பெற விரும்பினால், அடுத்த சிறந்த படிகள் உங்கள் பதிவில் உள்ள மின்னஞ்சல் முகவரியை ஏதேனும் சிக்கல்களுக்காக சரிபார்த்து, பின்னர் முந்தைய திரையில் மீண்டும் சந்தா செய்யவும் என்பதைக் கிளிக் செய்வதாகும்.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "நீங்கள் சந்தா செய்துள்ள மின்னஞ்சல் செய்திமடலைப் பெறவில்லை என்றால், இங்கே சரிபார்க்க சில விஷயங்கள் உள்ளன.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "நீங்கள் இந்த அனைத்து சரிபார்ப்புகளையும் முடித்துவிட்டு, இன்னும் மின்னஞ்சல்களைப் பெறவில்லை என்றால், {supportAddress} ஐத் தொடர்பு கொண்டு ஆதரவைப் பெறலாம்.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "மேலும் உதவி தேவையா? ஆதரவைத் தொடர்பு கொள்ளவும்", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "இரண்டு காரணங்களுக்காக உங்கள் கணக்கில் செய்திமடல்கள் முடக்கப்படலாம்: முந்தைய மின்னஞ்சல் ஸ்பாம் என குறிக்கப்பட்டது, அல்லது மின்னஞ்சலை அனுப்ப முயற்சிப்பது நிரந்தர தோல்வியில் முடிந்தது (பவுன்ஸ்).", "Next payment": "", - "No member exists with this e-mail address.": "இந்த மின்னஞ்சல் முகவரியுடன் எந்த உறுப்பினரும் இல்லை.", - "No member exists with this e-mail address. Please sign up first.": "இந்த மின்னஞ்சல் முகவரியுடன் எந்த உறுப்பினரும் இல்லை. முதலில் பதிவு செய்யவும்.", + "No member exists with this email address.": "இந்த மின்னஞ்சல் முகவரியுடன் எந்த உறுப்பினரும் இல்லை.", + "No member exists with this email address. Please sign up first.": "இந்த மின்னஞ்சல் முகவரியுடன் எந்த உறுப்பினரும் இல்லை. முதலில் பதிவு செய்யவும்.", "Not receiving emails?": "மின்னஞ்சல்களைப் பெறவில்லையா?", "Now check your email!": "இப்போது உங்கள் மின்னஞ்சலைச் சரிபார்க்கவும்!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "மீண்டும் சந்தா செய்த பிறகும், உங்கள் உள்பெட்டியில் மின்னஞ்சல்களைக் காணவில்லை என்றால், உங்கள் ஸ்பாம் கோப்புறையைச் சரிபார்க்கவும். சில உள்பெட்டி வழங்குநர்கள் முந்தைய ஸ்பாம் புகார்களின் பதிவை வைத்திருப்பார்கள் மற்றும் மின்னஞ்சல்களை தொடர்ந்து கொடியிடுவார்கள். இது நடந்தால், சமீபத்திய செய்திமடலை 'ஸ்பாம் அல்ல' என்று குறிக்கவும், இது அதை உங்கள் முதன்மை உள்பெட்டிக்கு திருப்பி அனுப்பும்.", diff --git a/ghost/i18n/locales/th/portal.json b/ghost/i18n/locales/th/portal.json index 9793ab3e4bc..3c585b2cd55 100644 --- a/ghost/i18n/locales/th/portal.json +++ b/ghost/i18n/locales/th/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "หากการร้องเรียนเกี่ยวกับสแปมเกิดขึ้นโดยไม่ได้ตั้งใจ หรือคุณต้องการเริ่มรับอีเมลอีกครั้ง คุณสามารถสมัครรับอีเมลอีกครั้งโดยคลิกที่ปุ่มบนหน้าจอก่อนหน้า", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "หากคุณยกเลิกการรับสมัครข้อมูลตอนนี้, คุณจะยังสามารถเข้าถึงได้ต่อไปจนถึง {periodEnd}", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "หากคุณมีบัญชีอีเมลของบริษัทหรือภาครัฐ โปรดติดต่อแผนกไอทีของคุณและขอให้พวกเขาอนุญาตให้รับอีเมลจาก {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "หากคุณต้องการเริ่มรับอีเมลอีกครั้ง ขั้นตอนถัดไปที่ดีที่สุดคือตรวจสอบที่อยู่อีเมลของคุณในระบบเพื่อดูปัญหาใดๆ หรือไม่ จากนั้นคลิกรับสมัครข้อมูลใหม่บนหน้าจอก่อนหน้า", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "หากคุณไม่ได้รับจดหมายข่าวทางอีเมลที่คุณสมัครรับข้อมูล โปรดตรวจสอบรายการต่อไปนี้", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "หากคุณตรวจสอบทั้งหมดนี้แล้ว แต่ยังไม่ได้รับอีเมล คุณสามารถติดต่อเพื่อแก้ไขปัญหาได้โดยติดต่อ {supportAddress}", @@ -120,8 +121,8 @@ "Need more help? Contact support": "ต้องการความช่วยเหลือเพิ่มเติม? ติดต่อฝ่ายสนับสนุน", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "จดหมายข่าวสามารถปิดการใช้งานในบัญชีของคุณด้วยเหตุผลสองประการ: อีเมลก่อนหน้านี้ถูกทำเครื่องหมายว่าเป็นสแปม หรือการพยายามที่ส่งอีเมล ส่งผลให้เกิดความล้มเหลวถาวร (อีเมลตีกลับ)", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "ไม่ได้รับอีเมล?", "Now check your email!": "ตรวจสอบอีเมลของคุณตอนนี้!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "เมื่อรับสมัครข้อมูลใหม่แล้ว, หากคุณยังคงไม่เห็นอีเมลในกล่องจดหมายของคุณ ให้ตรวจสอบโฟลเดอร์สแปมของคุณ. ผู้ให้บริการกล่องจดหมายบางราย เก็บบันทึกการร้องเรียนเกี่ยวกับสแปมก่อนหน้านี้ และจะทำการตั้งค่าสถานะอีเมลต่อไป หากเกิดเหตุการณ์เช่นนี้ ให้ทำเครื่องหมายจดหมายข่าวล่าสุดว่า 'ไม่ใช่สแปม' เพื่อย้ายกลับไปยังกล่องจดหมายหลักของคุณ", diff --git a/ghost/i18n/locales/tr/portal.json b/ghost/i18n/locales/tr/portal.json index 545ec33e106..48ae112711b 100644 --- a/ghost/i18n/locales/tr/portal.json +++ b/ghost/i18n/locales/tr/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Spam şikayeti yanlışlıkla olduysa veya tekrar e-posta almaya başlamak istiyorsanız, önceki ekrandaki düğmeyi tıklayarak e-postalara yeniden abone olabilirsiniz.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Aboneliğinizi şimdi iptal ederseniz, {periodEnd} tarihine kadar erişiminiz devam edecek.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Kurumsal veya devlet e-posta hesabınız varsa BT departmanınıza ulaşın ve {senderEmail} adresinden e-posta alınmasına izin vermelerini isteyin.", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Tekrar e-posta almaya başlamak istiyorsanız, bundan sonraki en iyi adım, dosyadaki e-posta adresinizde herhangi bir sorun olup olmadığını kontrol etmek ve ardından önceki ekranda yeniden abone ol'u tıklamaktır.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Abone olduğunuz e-posta bültenini almıyorsanız, kontrol etmeniz gereken birkaç şey var.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Tüm bu kontrolleri tamamlamanıza rağmen hala e-posta almıyorsanız, {supportAddress} ile iletişime geçerek destek almak için ulaşabilirsiniz.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Daha fazla yardıma mı ihtiyacınız var? Desteğe başvurun", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Bültenler, hesabınızda iki nedenden dolayı devre dışı bırakılabilir: Önceki bir e-posta istenmeyen posta olarak işaretlendi veya bir e-posta gönderilmeye çalışıldığında kalıcı bir başarısızlıkla (geri dönme) sonuçlandı.", "Next payment": "", - "No member exists with this e-mail address.": "Bu e-posta adresine sahip üye bulunmamaktadır.", - "No member exists with this e-mail address. Please sign up first.": "Bu e-posta adresine sahip bir üye bulunmamaktadır. Lütfen öncelikle kayıt olun.", + "No member exists with this email address.": "Bu e-posta adresine sahip üye bulunmamaktadır.", + "No member exists with this email address. Please sign up first.": "Bu e-posta adresine sahip bir üye bulunmamaktadır. Lütfen öncelikle kayıt olun.", "Not receiving emails?": "E-posta almıyor musun?", "Now check your email!": "Şimdi e-posta kutunu kontrol et!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Yeniden abone olduktan sonra hala e-postaları gelen kutunuzda görmüyorsanız, spam klasörünü kontrol edin. Bazı e-posta sağlayıcıları önceki spam şikayetlerini kaydedebilir ve e-postaları işaretlemeye devam edebilir. Bu durumda, en son bülteni 'Spam değil' olarak işaretleyerek ana gelen kutunuza geri taşıyabilirsiniz.", diff --git a/ghost/i18n/locales/uk/portal.json b/ghost/i18n/locales/uk/portal.json index 2a00018bb21..84e9f6942cd 100644 --- a/ghost/i18n/locales/uk/portal.json +++ b/ghost/i18n/locales/uk/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Якщо скарга на спам була випадковою або ви хочете знову отримувати електронні листи, ви можете знову підписатися на електронні листи, натиснувши кнопку на попередньому екрані.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Якщо ви скасуєте свою підписку зараз, ви матимете доступ до {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Якщо у вас є корпоративний або державний обліковий запис електронної пошти, зверніться до свого ІТ-відділу та попросіть їх дозволити отримувати електронні листи від {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Якщо ви хочете знову почати отримувати електронні листи, найкращим наступним кроком буде перевірити свою адресу електронної пошти на наявність проблем, а потім на попередньому екрані натиснути Підписатися знову.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Якщо ви не отримуєте розсилку електронною поштою, на яку підписалися, то ось декілька речей щоб перевірити.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Якщо ви виконали всі ці перевірки, але досі не отримуєте електронних листів, ви можете звернутись до нас по допомогу, зв’язавшись з {supportAddress}.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Потрібна допомога? Зверніться до служби підтримки", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Розсилки можуть бути вимкнені у вашому обліковому записі з двох причин: попередній електронний лист було позначено як спам або спроба надіслати електронний лист призвела до збою (чи відмови).", "Next payment": "", - "No member exists with this e-mail address.": "Не існує жодного учасника з цією адресою електронної пошти.", - "No member exists with this e-mail address. Please sign up first.": "Не існує жодного учасника з цією адресою електронної пошти. Будь ласка, спочатку зареєструйтеся.", + "No member exists with this email address.": "Не існує жодного учасника з цією адресою електронної пошти.", + "No member exists with this email address. Please sign up first.": "Не існує жодного учасника з цією адресою електронної пошти. Будь ласка, спочатку зареєструйтеся.", "Not receiving emails?": "Не приходять листи?", "Now check your email!": "А тепер перевір свою пошту!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Якщо після повторної підписки ви все ще не бачите електронних листів у папці \"Вхідні\", перевірте папку зі спамом. Деякі постачальники вхідних повідомлень реєструють попередні скарги на спам і продовжуватимуть позначати електронні листи. Якщо це станеться, позначте устанню розсилку як \"Не спам\", щоб повернути його до основної папки \"Вхідні\".", diff --git a/ghost/i18n/locales/ur/portal.json b/ghost/i18n/locales/ur/portal.json index 8f7bcb0c294..1f32a02bdff 100644 --- a/ghost/i18n/locales/ur/portal.json +++ b/ghost/i18n/locales/ur/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "اگر اسپیم کے خیالات کی شکایت صدف ہوئی ہو یا آپ مزید ای میلز حاصل کرنا چاہتے ہیں تو آپ پچھلے اسکرین پر دیے گئے بٹن پر کلک کر کے دوبارہ ای میل کی سبسکرپشن کر سکتے ہیں۔", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "اگر آپ اپنی سبسکرپشن اب منسلک کرتے ہیں، آپکو {periodEnd} تک رسائی ملتی رہے گی۔", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "اگر آپ کا کارپوریٹ یا حکومتی ای میل اکاؤنٹ ہے، اپنے آئٹی ڈیپارٹمنٹ سے رابطہ کریں اور ان سے کہیں کہ وہ ای میلز کو {senderEmail} سے ملنے دیں۔", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "اگر آپ مزید ای میلز حاصل کرنا چاہتے ہیں، تو بہترین اگلا قدم یہ ہے کہ آپ اپنے فائل میں اپنا ای میل ایڈریس چیک کریں اور پھر پچھلے اسکرین پر دئیے گئے دوبارہ سبسکرائب پر کلک کریں۔", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "اگر آپ نے تمام چیکس مکمل کی ہیں اور آپکو مزید ای میلز نہیں مل رہے ہیں، تو آپ {supportAddress} سے رابطہ کر کے حمایت حاصل کر سکتے ہیں۔", @@ -120,8 +121,8 @@ "Need more help? Contact support": "مزید مدد چاہیے؟ حمایت سے رابطہ کریں", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "نیوزلیٹرز کو آپکے اکاؤنٹ پر غیر فعال کرنے کے دو ممکنہ وجوہات ہیں: پچھلا ای میل اسپیم مارک کیا گیا تھا یا ای میل بھیجنے کی کوشش نے ہمیشہ کے لئے ناکامی (باؤنس) کا نتیجہ دیا۔", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "ای میلز نہیں آ رہے؟", "Now check your email!": "اب اپنے ای میل چیک کریں!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "جب ایک بار دوبارہ سبسکرائب ہو جائے، اگر آپکو مزید ای میلز اپنے ان باکس میں نہیں دکھتے ہیں تو اپنے ان باکس کی سپیم فولڈر چیک کریں۔ کچھ ان باکس فراہم کنندگان نے پچھلے اسپیم شکایات کا ریکارڈ رکھا ہوتا ہے اور وہ ای میلز کو جاری رکھتے ہیں۔ اگر یہ ہوتا ہے، تو آخری نیوزلیٹر کو 'غیر فعال' مارک کریں تاکہ یہ اسے دوبارہ آپکے پرائمری ان باکس میں منتقل کریں۔", diff --git a/ghost/i18n/locales/uz/portal.json b/ghost/i18n/locales/uz/portal.json index 454b9f4a290..61b1a87c0a6 100644 --- a/ghost/i18n/locales/uz/portal.json +++ b/ghost/i18n/locales/uz/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "", @@ -120,8 +121,8 @@ "Need more help? Contact support": "", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "", "Next payment": "", - "No member exists with this e-mail address.": "", - "No member exists with this e-mail address. Please sign up first.": "", + "No member exists with this email address.": "", + "No member exists with this email address. Please sign up first.": "", "Not receiving emails?": "Elektron xatlar olmayapsizmi?", "Now check your email!": "Endi elektron pochtangizni tekshiring!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "", diff --git a/ghost/i18n/locales/vi/portal.json b/ghost/i18n/locales/vi/portal.json index 37ef66fdadd..b10f302ab70 100644 --- a/ghost/i18n/locales/vi/portal.json +++ b/ghost/i18n/locales/vi/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "Nếu khiếu nại về thư rác là vô tình hoặc bạn muốn bắt đầu nhận lại bản tin email, bạn có thể hoàn tác bằng cách nhấn vào nút trên màn hình trước đó.", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "Nếu bạn hủy gói lúc này, bạn sẽ có quyền truy cập tiếp tục cho đến {periodEnd}.", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "Nếu bạn dùng tài khoản email của công ty hoặc chính phủ, hãy liên hệ bộ phận IT và yêu cầu họ cho phép nhận email từ {senderEmail}", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "Nếu bạn muốn bắt đầu nhận lại bản tin email, tốt nhất là kiểm tra địa chỉ email của bạn trong hồ sơ xem có vấn đề gì không và sau đó nhấn vào nhận lại trên màn hình.", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "Nếu bạn không nhận được bản tin email mà bạn đã đăng ký, hãy kiểm tra những điều sau.", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "Nếu bạn đã hoàn tất các bước kiểm tra này mà vẫn không nhận được bản tin email, hãy liên hệ {supportAddress} để được hỗ trợ.", @@ -120,8 +121,8 @@ "Need more help? Contact support": "Cần giúp đỡ? Liên hệ hỗ trợ", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Tài khoản của bạn có thể không nhận được bản tin email bởi hai lý do: Email trước đó đã bị đánh dấu là thư rác hoặc lỗi thất bại vĩnh viễn (thư bị trả lại).", "Next payment": "", - "No member exists with this e-mail address.": "Chưa có thành viên nào với email này", - "No member exists with this e-mail address. Please sign up first.": "Chưa có thành viên nào với email này. Vui lòng đăng ký trước.", + "No member exists with this email address.": "Chưa có thành viên nào với email này", + "No member exists with this email address. Please sign up first.": "Chưa có thành viên nào với email này. Vui lòng đăng ký trước.", "Not receiving emails?": "Bạn không nhận được email?", "Now check your email!": "Kiểm tra hộp thư ngay!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "Sau khi chọn nhận lại, nếu bạn vẫn không thấy email trong hộp thư đến của mình, hãy kiểm tra mục thư rác. Một số nhà cung cấp email lưu giữ hồ sơ về các khiếu nại thư rác trước đây và sẽ tiếp tục phân loại email. Nếu điều này xảy ra, hãy đánh dấu bản tin email mới nhất là 'Không phải thư rác' để chuyển nó trở lại hộp thư đến của bạn.", diff --git a/ghost/i18n/locales/zh-Hant/portal.json b/ghost/i18n/locales/zh-Hant/portal.json index 9ac2b76e9e1..ad0f49aefe4 100644 --- a/ghost/i18n/locales/zh-Hant/portal.json +++ b/ghost/i18n/locales/zh-Hant/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "如果您不小心將電子報標示成垃圾郵件,或者您希望重新開始接收電子報,您可以點擊前一個畫面上的按鈕以重新訂閱電子報。", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "如果現在取消訂閱,您在 {periodEnd} 之前仍可存取內容。", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "如果您有企業或政府郵件帳戶,請聯繫相關 IT 部門,要求他們允許來自 {senderEmail} 的郵件。", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "如果您希望重新開始接收郵件,最好的方法是檢查您註冊的電子郵件地址是否正常運作,然後在前一個畫面點擊重新訂閱。", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "如果您沒有收到您訂閱的電子報,請檢查以下幾個事項。", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "如果您已經完成了上述所有檢查項目,但仍然沒有收到電子報,您可以透過聯繫 {supportAddress} 取得協助。", @@ -120,8 +121,8 @@ "Need more help? Contact support": "需要更多協助?聯繫客服", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "您的帳號可能會因為兩個原因而停止接收電子報:先前的郵件被標記為垃圾郵件,或者嘗試發送郵件時出現永久失敗(郵件遭到退回)。", "Next payment": "", - "No member exists with this e-mail address.": "沒有會員使用此電子郵件地址。", - "No member exists with this e-mail address. Please sign up first.": "沒有會員使用此電子郵件地址。請您先註冊。", + "No member exists with this email address.": "沒有會員使用此電子郵件地址。", + "No member exists with this email address. Please sign up first.": "沒有會員使用此電子郵件地址。請您先註冊。", "Not receiving emails?": "沒有收到電子郵件?", "Now check your email!": "立即檢查您的電子郵件!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "重新訂閱後,如果您在收件夾中仍然看不到郵件,請檢查您的垃圾郵件匣。一些電子郵件服務商會保留先前的垃圾郵件記錄並持續標記此類郵件。如果發生這種情況,請將最新的電子報標記為「非垃圾郵件」,將其移回您的主要收件匣。", diff --git a/ghost/i18n/locales/zh/portal.json b/ghost/i18n/locales/zh/portal.json index f5ead79291c..ce0b2944e69 100644 --- a/ghost/i18n/locales/zh/portal.json +++ b/ghost/i18n/locales/zh/portal.json @@ -98,6 +98,7 @@ "If the spam complaint was accidental, or you would like to begin receiving emails again, you can resubscribe to emails by clicking the button on the previous screen.": "如果误标记为垃圾邮件,或者您希望再次开启邮件接收,您可以通过点击上一页的按钮重新订阅。", "If you cancel your subscription now, you will continue to have access until {periodEnd}.": "如果现在取消订阅,您仍可在 {periodEnd} 之前访问内容。", "If you have a corporate or government email account, reach out to your IT department and ask them to allow emails to be received from {senderEmail}": "如果您使用公司或者政府邮件账户,请联系相应IT部门以允许从{senderEmail}接收邮件。", + "If you have an account, a sign in link will be sent to you shortly. Please check your inbox and spam folder.": "", "If you would like to start receiving emails again, the best next steps are to check your email address on file for any issues and then click resubscribe on the previous screen.": "如果您希望重新开始接收邮件,接下来最好先检查存档的电子邮件地址,然后在之前的页面点击重新订阅。", "If you're not receiving the email newsletter you've subscribed to, here are a few things to check.": "如果没有收到订阅了的新闻信,请检查以下事项。", "If you've completed all these checks and you're still not receiving emails, you can reach out to get support by contacting {supportAddress}.": "如果您已经完成全部检查项目却依旧没有收到邮件,您可以联系{supportAddress}获取支持。", @@ -120,8 +121,8 @@ "Need more help? Contact support": "需要更多帮助?联系支持服务", "Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "您账户的新闻信被禁用的可能原因有两个:先前的电子邮件被标记为垃圾邮件,或者发送邮件遇到永久错误 (bounce)", "Next payment": "", - "No member exists with this e-mail address.": "没有会员使用此电子邮箱地址。", - "No member exists with this e-mail address. Please sign up first.": "没有会员使用此电子邮箱地址。请先注册。", + "No member exists with this email address.": "没有会员使用此电子邮箱地址。", + "No member exists with this email address. Please sign up first.": "没有会员使用此电子邮箱地址。请先注册。", "Not receiving emails?": "没有收到电子邮件?", "Now check your email!": "现在请检查您的电子邮件!", "Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "重新订阅后,如果收件箱中仍然没有看到邮件,请检查垃圾邮件文件夹。一些邮件服务商会保留以往的垃圾邮件投诉记录,并继续对邮件进行标记。如果出现这种情况,请将最新的邮件通讯标记为“非垃圾邮件”,并移回主收件箱。", diff --git a/yarn.lock b/yarn.lock index c88a68ce6ed..6b694345563 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4955,7 +4955,7 @@ "@radix-ui/react-use-is-hydrated" "0.1.0" "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-checkbox@1.3.3", "@radix-ui/react-checkbox@^1.3.3": +"@radix-ui/react-checkbox@1.3.3": version "1.3.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz#db45ca8a6d5c056a92f74edbb564acee05318b79" integrity sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw== @@ -8853,7 +8853,7 @@ resolved "https://registry.yarnpkg.com/@tryghost/domain-events/-/domain-events-1.0.2.tgz#0d4b134a997802946f3615385a09b82c4904d8c7" integrity sha512-y2sam/cOhCDViWLzLFmGn7ZIwNpz7dTOK1zygxwVrojhwrORWPtbA9MSoVrT6zUF9IplOx53/MAgnE1CYXSfng== -"@tryghost/elasticsearch@^3.0.22", "@tryghost/elasticsearch@^3.0.24": +"@tryghost/elasticsearch@^3.0.24": version "3.0.24" resolved "https://registry.yarnpkg.com/@tryghost/elasticsearch/-/elasticsearch-3.0.24.tgz#291d51d6a6cc607fa860612dfc37098c4ebdedc4" integrity sha512-/ocoCYS74+Dc1qH9yJCgqHtOyxQMvwmY71MPAqhfLHAfa4vpsd8VJNa2EsO/rkLRsw+cmf8p/8ZILUXXnBOheg== @@ -8883,15 +8883,7 @@ focus-trap "^6.7.2" postcss-preset-env "^7.3.1" -"@tryghost/errors@1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@tryghost/errors/-/errors-1.3.6.tgz#b34993d03122a59f29bf7050a3c0bc90a23a7254" - integrity sha512-qxl6wF5tlhr646Earjmfcz3km6d+B0tzUmocyVu3tY8StI4pH8mLgzHDtkiTAls9ABPichBxZQe6a8PDcVJbFw== - dependencies: - "@stdlib/utils-copy" "^0.2.0" - uuid "^9.0.0" - -"@tryghost/errors@1.3.8", "@tryghost/errors@^1.2.26", "@tryghost/errors@^1.2.3", "@tryghost/errors@^1.3.8": +"@tryghost/errors@1.3.6", "@tryghost/errors@1.3.8", "@tryghost/errors@^1.2.26", "@tryghost/errors@^1.2.3", "@tryghost/errors@^1.3.7", "@tryghost/errors@^1.3.8": version "1.3.8" resolved "https://registry.yarnpkg.com/@tryghost/errors/-/errors-1.3.8.tgz#d4212b52e876360b4fa8e303ae13ef86f3e95846" integrity sha512-2+4ExAAWM0rFWC7FlzxQMzIvIEQKt/vQLxLyqJqCmAcJa4i2uqUPJHqd/X5BBRuSTuftgca7EAo7adESbHEkZw== @@ -8939,7 +8931,7 @@ resolved "https://registry.yarnpkg.com/@tryghost/http-cache-utils/-/http-cache-utils-0.1.20.tgz#5a513593a2d5d944389a88eb56a8614cd0599350" integrity sha512-8+GbDQ/xo97orv5UUYv2x92e3RovVurYoFcBY+e0IJlExgSxP7oOqskqgFfZVs5Hhwi+SpZs6gFw2cv1OlUY9g== -"@tryghost/http-stream@^0.1.34", "@tryghost/http-stream@^0.1.37": +"@tryghost/http-stream@^0.1.37": version "0.1.37" resolved "https://registry.yarnpkg.com/@tryghost/http-stream/-/http-stream-0.1.37.tgz#319f0c8691b75fc5949a1a9c866bd410f6c52f05" integrity sha512-QY9UhDrjHEdrlnnQaJ49kshdAU2pDCBHg6+QzyRVOIqvq+UHpydhhkxy3QDN1b+EII2DjpDMlOK1SSL9q6fXew== @@ -9156,41 +9148,7 @@ lodash "^4.17.21" luxon "^1.26.0" -"@tryghost/logging@2.4.19": - version "2.4.19" - resolved "https://registry.yarnpkg.com/@tryghost/logging/-/logging-2.4.19.tgz#8aab372486268b6fc8e31615b6e79d59b299a44f" - integrity sha512-NCCElue4AqvfhLnJLjDDR1uXBXQwfDOuGZTSI9/relqj+cfxwezQuPGG66EkPEB29ZAdtnHLOqMJTF2k6/s/hw== - dependencies: - "@tryghost/bunyan-rotating-filestream" "^0.0.7" - "@tryghost/elasticsearch" "^3.0.22" - "@tryghost/http-stream" "^0.1.34" - "@tryghost/pretty-stream" "^0.1.27" - "@tryghost/root-utils" "^0.3.31" - bunyan "^1.8.15" - bunyan-loggly "^1.4.2" - fs-extra "^11.0.0" - gelf-stream "^1.1.1" - json-stringify-safe "^5.0.1" - lodash "^4.17.21" - -"@tryghost/logging@2.4.23": - version "2.4.23" - resolved "https://registry.yarnpkg.com/@tryghost/logging/-/logging-2.4.23.tgz#a2351b55c0d413e3f06ee41cbcfe7bbdff785972" - integrity sha512-xmindrXwW0zKvuxdTNkyK3TM1exPvgkqqSRXOdf8G1SDZpuvemWGlrllAFQuj2J/K4dy9CWcYl9GpM1wYaG1CQ== - dependencies: - "@tryghost/bunyan-rotating-filestream" "^0.0.7" - "@tryghost/elasticsearch" "^3.0.24" - "@tryghost/http-stream" "^0.1.37" - "@tryghost/pretty-stream" "^0.2.0" - "@tryghost/root-utils" "^0.3.33" - bunyan "^1.8.15" - bunyan-loggly "^1.4.2" - fs-extra "^11.0.0" - gelf-stream "^1.1.1" - json-stringify-safe "^5.0.1" - lodash "^4.17.21" - -"@tryghost/logging@2.5.0", "@tryghost/logging@^2.4.23", "@tryghost/logging@^2.4.7": +"@tryghost/logging@2.4.19", "@tryghost/logging@2.4.23", "@tryghost/logging@2.5.0", "@tryghost/logging@^2.4.23", "@tryghost/logging@^2.4.7": version "2.5.0" resolved "https://registry.yarnpkg.com/@tryghost/logging/-/logging-2.5.0.tgz#239fc3518cba48ff18794dfa24be44c5d2ba7a45" integrity sha512-fLPWNbghbdsUIH/7+CPmhT8l1MhZPI6za1Zm65rcwjGpaX+1Cr1ehcj22rMm91sl4A8AVe8vpYofRKM3UL8GIQ== @@ -9314,15 +9272,6 @@ chalk "^4.1.0" sywac "^1.3.0" -"@tryghost/pretty-stream@^0.1.27": - version "0.1.29" - resolved "https://registry.yarnpkg.com/@tryghost/pretty-stream/-/pretty-stream-0.1.29.tgz#e0bbab7333a6cac38fdfa19d3da86aeaaded7f02" - integrity sha512-HByPoCd5R63bRg34wZ4D7bfCeBsLTP3gLCi5xVsOnETxB4GiHHo31/vm+kI8pZd7mnWMre3nnDdVR0Sf72U0eQ== - dependencies: - date-format "^4.0.14" - lodash "^4.17.21" - prettyjson "^1.2.5" - "@tryghost/pretty-stream@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@tryghost/pretty-stream/-/pretty-stream-0.2.0.tgz#622e6c37a6a8f3f724e10e2980f51ec8efae96bc" @@ -9369,7 +9318,7 @@ got "13.0.0" lodash "^4.17.21" -"@tryghost/root-utils@0.3.33", "@tryghost/root-utils@^0.3.24", "@tryghost/root-utils@^0.3.31", "@tryghost/root-utils@^0.3.33": +"@tryghost/root-utils@0.3.33", "@tryghost/root-utils@^0.3.24", "@tryghost/root-utils@^0.3.33": version "0.3.33" resolved "https://registry.yarnpkg.com/@tryghost/root-utils/-/root-utils-0.3.33.tgz#208e3d15520131c2d4157c7e62fe74771a7a110f" integrity sha512-Gmc/TrKtiRT7PV9JOPoSZ7jAOl/jJDWJFKNaLZbDQaiJIBP5C6PucqEfRqGb2Ko/S9j73HzEEBu6B7+qZMvbBg== @@ -22684,10 +22633,10 @@ iterator.prototype@^1.1.4: has-symbols "^1.1.0" set-function-name "^2.0.2" -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== +jackspeak@2.3.6, jackspeak@^3.1.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -25737,35 +25686,18 @@ module-details-from-path@^1.0.3: resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.4.tgz#b662fdcd93f6c83d3f25289da0ce81c8d9685b94" integrity sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w== -moment-timezone@0.5.45, moment-timezone@^0.5.23, moment-timezone@^0.5.31, moment-timezone@^0.5.33: +moment-timezone@0.5.45, moment-timezone@^0.5.23, moment-timezone@^0.5.31, moment-timezone@^0.5.33, moment-timezone@^0.5.48: version "0.5.45" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== dependencies: moment "^2.29.4" -moment-timezone@^0.5.48: - version "0.5.48" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967" - integrity sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw== - dependencies: - moment "^2.29.4" - -moment@2.24.0, moment@^2.10.2, moment@^2.18.1, moment@^2.19.3: +moment@2.24.0, moment@2.27.0, moment@2.30.1, moment@^2.10.2, moment@^2.18.1, moment@^2.19.3, moment@^2.27.0, moment@^2.29.4: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== -moment@2.27.0: - version "2.27.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" - integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== - -moment@2.30.1, moment@^2.27.0, moment@^2.29.4: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - moo@^0.5.0, moo@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" @@ -26479,7 +26411,7 @@ numbered@^1.1.0: resolved "https://registry.yarnpkg.com/numbered/-/numbered-1.1.0.tgz#9fcd79564c73a84b9574e8370c3d8e58fe3c133c" integrity sha512-pv/ue2Odr7IfYOO0byC1KgBI10wo5YDauLhxY6/saNzAdAs0r1SotGCPzzCLNPL0xtrAwWRialLu23AAu9xO1g== -nwsapi@^2.2.0, nwsapi@^2.2.10, nwsapi@^2.2.12: +nwsapi@2.2.12, nwsapi@^2.2.0, nwsapi@^2.2.10, nwsapi@^2.2.12: version "2.2.12" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==