diff --git a/packages/nocodb/tests/unit/rest/tests/columnTypeSpecific.test.ts b/packages/nocodb/tests/unit/rest/tests/columnTypeSpecific.test.ts index 2c4f24d495..d4c17f20fe 100644 --- a/packages/nocodb/tests/unit/rest/tests/columnTypeSpecific.test.ts +++ b/packages/nocodb/tests/unit/rest/tests/columnTypeSpecific.test.ts @@ -106,7 +106,7 @@ function columnTypeSpecificTests() { let columns: any[]; let unfilteredRecords: any[] = []; - describe.skip('CreatedAt, LastModifiedAt Field', () => { + describe('CreatedAt, LastModifiedAt Field', () => { beforeEach(async function () { context = await init(); base = await createProject(context); @@ -120,20 +120,10 @@ function columnTypeSpecificTests() { uidt: UITypes.ID, }, { - column_name: 'Date', - title: 'Date', + column_name: 'DateField', + title: 'DateField', uidt: UITypes.Date, }, - // { - // column_name: 'CreatedAt', - // title: 'CreatedAt', - // uidt: UITypes.CreatedTime, - // }, - // { - // column_name: 'LastModifiedAt', - // title: 'LastModifiedAt', - // uidt: UITypes.LastModifiedTime, - // }, ], }); @@ -142,7 +132,7 @@ function columnTypeSpecificTests() { const rowAttributes = []; for (let i = 0; i < 100; i++) { const row = { - Date: rowMixedValue(columns[1], i), + DateField: rowMixedValue(columns[1], i), }; rowAttributes.push(row); } @@ -158,8 +148,120 @@ function columnTypeSpecificTests() { expect(unfilteredRecords.length).to.equal(100); }); - it('should filter records by created-at field', async () => { - console.log('test'); + describe('Basic verification', async () => { + + it('New table: verify system fields are added by default', async () => { + // Id, Date, CreatedAt, LastModifiedAt + expect(columns.length).to.equal(4); + expect(columns[2].title).to.equal('CreatedAt'); + expect(columns[2].uidt).to.equal(UITypes.CreatedTime); + expect(columns[2].system).to.equal(true); + expect(columns[3].title).to.equal('UpdatedAt'); + expect(columns[3].uidt).to.equal(UITypes.LastModifiedTime); + expect(columns[3].system).to.equal(true); + }); + + it('New record: verify created-at is filled with current dateTime, last-modified-at is null', async () => { + // get current date time + const currentDateTime = new Date(); + const storedDateTime = new Date(unfilteredRecords[0].CreatedAt); + + // calculate difference between current date time and stored date time + const difference = currentDateTime.getTime() - storedDateTime.getTime(); + expect(difference).to.be.lessThan(1000); + + expect(unfilteredRecords[0].CreatedAt).to.not.equal(null); + expect(unfilteredRecords[0].LastModifiedAt).to.equal(null); + }); + + it('Modify record: verify last-modified-at is updated', async () => { + // get current date time + const currentDateTime = new Date(); + const d1 = new Date(); + d1.setDate(d1.getDate() - 200); + + // sleep for 3 seconds + await new Promise((resolve) => setTimeout(resolve, 3000)); + + // update record + await request(context.app) + .patch(`/api/v2/tables/${table.id}/records`) + .set('xc-auth', context.token) + .send([ + { + Id: unfilteredRecords[0].Id, + DateField: d1.toISOString().slice(0, 10), + }, + ]) + .expect(200); + + // get updated record + let updatedRecord = await listRow({ + base, + table, + options: { limit: 1 }, + }); + + // get stored date time + const storedDateTime1 = new Date(updatedRecord[0].UpdatedAt); + + // calculate difference between current date time and stored date time + let difference = storedDateTime1.getTime() - currentDateTime.getTime(); + expect(difference).to.be.greaterThan(1500); + expect(updatedRecord[0].UpdatedAt).to.not.equal(null); + + // Update again & confirm last modified time is updated + // sleep for 3 seconds + await new Promise((resolve) => setTimeout(resolve, 3100)); + + // update record + d1.setDate(d1.getDate() - 100); + await request(context.app) + .patch(`/api/v2/tables/${table.id}/records`) + .set('xc-auth', context.token) + .send([ + { + Id: unfilteredRecords[0].Id, + DateField: d1.toISOString().slice(0, 10), + }, + ]) + .expect(200); + + // get updated record + updatedRecord = await listRow({ + base, + table, + options: { limit: 1 }, + }); + + // get stored date time + const storedDateTime2 = new Date(updatedRecord[0].UpdatedAt); + + // calculate difference between current date time and stored date time + difference = storedDateTime2.getTime() - storedDateTime1.getTime(); + expect(difference).to.be.greaterThan(1500); + }); + + it('Add field: verify contents of both fields are same', async () => { + // add another CreatedTime field + await createColumn(context, table, { + title: 'CreatedAt2', + uidt: UITypes.CreatedTime, + column_name: 'CreatedAt2', + }); + + // get all columns + const columns = await getColumnsByAPI(context, base, table); + + // get all records + const records = await listRow({ base, table }); + + // verify contents of both fields are same + expect(columns.columns[4].title).to.equal('CreatedAt2'); + expect(columns.columns[4].uidt).to.equal(UITypes.CreatedTime); + expect(columns.columns[4].system).to.equal(false); + expect(records[0].CreatedAt).to.equal(records[0].CreatedAt2); + }); }); }); }