mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-03-04 02:01:58 -05:00
Fixed non-deretministic post ordering in content gating test suite
refs https://github.com/TryGhost/Ghost/pull/17609 - The tests for content gating started to fail with introduction of the index on `published_at` data in for `posts` table. The reason for the failure was identical `published_at` date set during the fixture insertion, making the returned results change order non-deterministically. The problem is mostly in how the test is set up as it's quite unrealistic to have multiple posts in the system inserted at the same time down to millisecond. Maybe... by some coincidence, but thats not a problem we should care too much about imo.
This commit is contained in:
parent
d068409fac
commit
92fb2a54ae
2 changed files with 11 additions and 6 deletions
|
@ -1,4 +1,5 @@
|
||||||
const logging = require('@tryghost/logging');
|
const logging = require('@tryghost/logging');
|
||||||
|
const DatabaseInfo = require('@tryghost/database-info');
|
||||||
const {createNonTransactionalMigration} = require('../../utils');
|
const {createNonTransactionalMigration} = require('../../utils');
|
||||||
|
|
||||||
const INDEX_NAME = 'posts_published_at_index';
|
const INDEX_NAME = 'posts_published_at_index';
|
||||||
|
@ -7,7 +8,7 @@ module.exports = createNonTransactionalMigration(
|
||||||
async function up(knex) {
|
async function up(knex) {
|
||||||
let hasIndex = false;
|
let hasIndex = false;
|
||||||
|
|
||||||
if (knex.client.config.client === 'sqlite3') {
|
if (DatabaseInfo.isSQLite(knex)) {
|
||||||
const result = await knex.raw(`select * from sqlite_master where type = 'index' and tbl_name = 'posts' and name = '${INDEX_NAME}'`);
|
const result = await knex.raw(`select * from sqlite_master where type = 'index' and tbl_name = 'posts' and name = '${INDEX_NAME}'`);
|
||||||
hasIndex = (result.length !== 0);
|
hasIndex = (result.length !== 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -29,7 +30,7 @@ module.exports = createNonTransactionalMigration(
|
||||||
async function down(knex) {
|
async function down(knex) {
|
||||||
let missingIndex = false;
|
let missingIndex = false;
|
||||||
|
|
||||||
if (knex.client.config.client === 'sqlite3') {
|
if (DatabaseInfo.isSQLite(knex)) {
|
||||||
const result = await knex.raw(`select * from sqlite_master where type = 'index' and tbl_name = 'posts' and name = '${INDEX_NAME}'`);
|
const result = await knex.raw(`select * from sqlite_master where type = 'index' and tbl_name = 'posts' and name = '${INDEX_NAME}'`);
|
||||||
missingIndex = (result.length === 0);
|
missingIndex = (result.length === 0);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -302,24 +302,28 @@ describe('api/endpoints/content/posts', function () {
|
||||||
before (function () {
|
before (function () {
|
||||||
publicPost = testUtils.DataGenerator.forKnex.createPost({
|
publicPost = testUtils.DataGenerator.forKnex.createPost({
|
||||||
slug: 'free-to-see',
|
slug: 'free-to-see',
|
||||||
visibility: 'public'
|
visibility: 'public',
|
||||||
|
published_at: new Date('2023-07-15T04:20:30.000+00:00')
|
||||||
});
|
});
|
||||||
|
|
||||||
membersPost = testUtils.DataGenerator.forKnex.createPost({
|
membersPost = testUtils.DataGenerator.forKnex.createPost({
|
||||||
slug: 'thou-shalt-not-be-seen',
|
slug: 'thou-shalt-not-be-seen',
|
||||||
visibility: 'members'
|
visibility: 'members',
|
||||||
|
published_at: new Date('2023-07-20T04:20:30.000+00:00')
|
||||||
});
|
});
|
||||||
|
|
||||||
paidPost = testUtils.DataGenerator.forKnex.createPost({
|
paidPost = testUtils.DataGenerator.forKnex.createPost({
|
||||||
slug: 'thou-shalt-be-paid-for',
|
slug: 'thou-shalt-be-paid-for',
|
||||||
visibility: 'paid'
|
visibility: 'paid',
|
||||||
|
published_at: new Date('2023-07-25T04:20:30.000+00:00')
|
||||||
});
|
});
|
||||||
|
|
||||||
membersPostWithPaywallCard = testUtils.DataGenerator.forKnex.createPost({
|
membersPostWithPaywallCard = testUtils.DataGenerator.forKnex.createPost({
|
||||||
slug: 'thou-shalt-have-a-taste',
|
slug: 'thou-shalt-have-a-taste',
|
||||||
visibility: 'members',
|
visibility: 'members',
|
||||||
mobiledoc: '{"version":"0.3.1","markups":[],"atoms":[],"cards":[["paywall",{}]],"sections":[[1,"p",[[0,[],0,"Free content"]]],[10,0],[1,"p",[[0,[],0,"Members content"]]]]}',
|
mobiledoc: '{"version":"0.3.1","markups":[],"atoms":[],"cards":[["paywall",{}]],"sections":[[1,"p",[[0,[],0,"Free content"]]],[10,0],[1,"p",[[0,[],0,"Members content"]]]]}',
|
||||||
html: '<p>Free content</p><!--members-only--><p>Members content</p>'
|
html: '<p>Free content</p><!--members-only--><p>Members content</p>',
|
||||||
|
published_at: new Date('2023-07-30T04:20:30.000+00:00')
|
||||||
});
|
});
|
||||||
|
|
||||||
return testUtils.fixtures.insertPosts([
|
return testUtils.fixtures.insertPosts([
|
||||||
|
|
Loading…
Add table
Reference in a new issue