Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 30 additions & 30 deletions components/amorphic/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions components/amorphic/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
"types": "dist/index.d.ts",
"version": "11.0.1",
"dependencies": {
"@haventech/persistor": "9.x",
"@haventech/semotus": "7.x",
"@haventech/supertype": "^6.0.0",
"@haventech/persistor": "9.0.2-beta.1",
"@haventech/semotus": "7.0.1-beta.1",
"@haventech/supertype": "^6.0.1-beta.1",
"amorphic-bindster": "2.0.*",
"compression": "1.7.4",
"cookie-parser": "1.4.6",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {Supertype, supertypeClass, property, Remoteable, Persistable} from '../../../../dist/index.js';
import {Supertype, supertypeClass, property, Remoteable, Persistable, Bindable} from '../../../../dist/index.js';
import {Person} from './person';
import {Ticket} from './ticket';
console.log("Compiling Project");
@supertypeClass
export class Project extends Remoteable(Persistable(Supertype)) {
export class Project extends Persistable(Remoteable(Bindable(Supertype))) {

// Name
@property({length: 40, rule: ["name", "required"]})
Expand Down
7 changes: 3 additions & 4 deletions components/amorphic/typescript_tests/apps/common/js/ticket.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import {Supertype, supertypeClass, property, remote, Remoteable, Persistable} from '../../../../dist/index.js';
import {Person} from './person';
import {Supertype, supertypeClass, property, remote, Remoteable, Persistable, Bindable} from '../../../../dist/index.js';
import {Project} from './project';
import {TicketItemComment} from './ticketItemComment';
import {TicketItem} from './ticketItem';
import {Created, Constructable} from './created'
import {Created} from './created'
console.log("Compiling Ticket");
@supertypeClass


export class Ticket extends Created(Remoteable(Persistable(Supertype))){
export class Ticket extends (Created(Persistable(Remoteable(Bindable(Supertype))))) {

@property({rule: ['required']})
title: string;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import {Supertype, supertypeClass, property, Remoteable, Persistable} from '../../../../dist/index.js';
import {Supertype, supertypeClass, property, Remoteable, Persistable, Bindable} from '../../../../dist/index.js';
import {Person} from './person';
import {Ticket} from './ticket';
console.log("Compiling TicketItem");

@supertypeClass
export class TicketItem extends Persistable(Remoteable(Supertype)) {
export class TicketItem extends Persistable(Remoteable(Bindable((Supertype)))) {

// Secure properties can only be set on the server
@property({getType: ()=>{return Person}})
Expand Down
102 changes: 102 additions & 0 deletions components/amorphic/typescript_tests/unittest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { expect } from 'chai';
import {Amorphic} from '../dist/index.js';
import {Ticket} from "./apps/common/js/ticket";
import {supertypeClass} from "../dist/index";
import { Project } from './apps/common/js/project.js';
import { TicketItem } from './apps/common/js/ticketItem.js';

@supertypeClass({toClient: false, toServer: true})
class Dummy {};
Expand Down Expand Up @@ -38,4 +40,104 @@ describe('Banking from pgsql Example', () => {
expect(tickets.length).to.equal(1);
expect(tickets[0].project.name).to.equal("Project One");
});

it('create an object copy and save, _id only saved for new objects', async () => {
const testProject = new Project('TestProject', 'This is a test of create copy');
var tx = testProject.amorphic.beginTransaction();
testProject.setDirty(tx);
await testProject.amorphic.commit({transaction: tx, notifyChanges: true});
//const project = await Project.persistorFetchByQuery({name: 'TestProject'});
//console.log('Kam project saved!', project);

const testTicket = new Ticket('FirstTestTicket', 'First test ticket for Test project');
const firstTicketItem = new TicketItem(testTicket);
const secondTicketItem = new TicketItem(testTicket);
testTicket.ticketItems.push(firstTicketItem);
testTicket.ticketItems.push(secondTicketItem);
testProject.tickets.push(testTicket);
testTicket.project = testProject;

var tx = testTicket.amorphic.beginTransaction();
testTicket.setDirty(tx);
await testTicket.amorphic.commit({transaction: tx, notifyChanges: true});
const ticket = await Ticket.persistorFetchByQuery({title: 'FirstTestTicket'});

const clonedTicket = testTicket.createCopy(function(obj, prop, template){
switch (template.amorphicClassName) {
case 'Project':
return testProject;
}
return null;
});

expect(clonedTicket._id).to.equal(undefined);
expect(clonedTicket.ticketItems[0]._id).to.equal(undefined);
expect(clonedTicket.ticketItems[1]._id).to.equal(undefined);
expect(clonedTicket.ticketItems[0]._id).to.equal(undefined);
expect(clonedTicket.ticketItems[1]._id).to.equal(undefined);
expect(clonedTicket._id).to.not.equal(testTicket._id);

clonedTicket.title = 'ClonedFirstTestTicket';
var tx = clonedTicket.amorphic.beginTransaction();
clonedTicket.setDirty(tx);
await clonedTicket.amorphic.commit({transaction: tx});
const clonedSavedTicket: Ticket[] = await Ticket.persistorFetchByQuery({title: 'ClonedFirstTestTicket'});

expect(clonedSavedTicket.length).to.equal(1);
expect(clonedSavedTicket[0].ticketItems[0]._id).to.equal(clonedTicket.ticketItems[0]._id);
expect(clonedSavedTicket[0].ticketItems[1]._id).to.equal(clonedTicket.ticketItems[1]._id);
expect(clonedSavedTicket[0].ticketItems[0]._id).to.not.equal(clonedSavedTicket[0].ticketItems[1]._id);
expect(clonedSavedTicket[0].ticketItems[0]._id).to.not.equal(undefined);
expect(clonedSavedTicket[0].ticketItems[1]._id).to.not.equal(undefined);

const project: Project[] = await Project.persistorFetchByQuery({name: 'TestProject'});
expect(project[0]._id).to.equal(testProject._id);
expect(project[0].tickets[0]._id).to.equal(testTicket?._id);
expect(project[0].tickets[1]._id).to.equal(clonedTicket?._id);
});

it('create an object copy and save, _id saved for all objects', async () => {
var testProject = new Project('TestProject', 'This is a test of create copy');
var firstTicket = new Ticket('FirstTestTicket', 'First test ticket for Test project');
var secondTicket = new Ticket('SecondTestTicket', 'Second test ticket for Test project');
testProject.tickets.push(firstTicket);
testProject.tickets.push(secondTicket);
firstTicket.project = testProject;
secondTicket.project = testProject;

var tx = testProject.amorphic.beginTransaction();
testProject.setDirty(tx);
await testProject.amorphic.commit({transaction: tx, notifyChanges: true});
const project = await Project.persistorFetchByQuery({name: 'TestProject'});

const clonedProject = await testProject.createCopy(function(obj, prop, template){
switch (template.amorphicClassName) {
case 'Project':
return null;
}
return null;
});

expect(clonedProject._id).to.equal(undefined);
expect(clonedProject?.tickets[0]?._id).to.equal(undefined);
expect(clonedProject?.tickets[1]?._id).to.equal(undefined);

clonedProject.name = 'ClonedTestProject';
var tx = clonedProject.amorphic.beginTransaction();
clonedProject.setDirty(tx);
await clonedProject.amorphic.commit({transaction: tx});
const clonedSavedTestProject = await Project.persistorFetchByQuery({name: 'ClonedTestProject'});

expect(clonedSavedTestProject.length).to.equal(1);
expect(clonedSavedTestProject[0].tickets[0]._id).to.equal(clonedProject?.tickets[0]._id);
expect(clonedSavedTestProject[0].tickets[1]._id).to.equal(clonedProject?.tickets[1]._id);
expect(clonedSavedTestProject[0].tickets[0]._id).to.not.equal(clonedSavedTestProject[0].tickets[1]._id);
expect(project[0]?._id).to.not.equal(testProject[0]?._id);
expect(project[0]?.tickets[0]?._id).to.not.equal(clonedSavedTestProject[0]?.tickets[0]?._id);
expect(project[0]?.tickets[0]?._id).to.not.equal(clonedSavedTestProject[0]?.tickets[1]?._id);
expect(project[0]?.tickets[1]?._id).to.not.equal(clonedSavedTestProject[0]?.tickets[0]?._id);
expect(project[0]?.tickets[1]?._id).to.not.equal(clonedSavedTestProject[0]?.tickets[1]?._id);
expect(clonedSavedTestProject[0]?.tickets[0]?._id).to.not.equal(undefined);
expect(clonedSavedTestProject[0]?.tickets[1]?._id).to.not.equal(undefined);
});
});
3 changes: 3 additions & 0 deletions components/persistor/HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
## 9.0.2
* package-lock bump to pick up latest supertype version.
* added test case for testing _ids during object cloning.
## 9.0.1
* Added executionPromise to knex commit and rollback
* Explicitly return promise from knex transaction
Expand Down
20 changes: 10 additions & 10 deletions components/persistor/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions components/persistor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@haventech/persistor",
"description": "A subclass of supertype that serializes to and reconstitutes from MongoDB or SQL databases",
"homepage": "https://github.com/haven-life/persistor",
"version": "9.0.1",
"version": "9.0.2",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"dependencies": {
Expand All @@ -17,10 +17,10 @@
"uuid": "8.3.2"
},
"peerDependencies": {
"@haventech/supertype": "6.x"
"@haventech/supertype": "6.0.1-beta.1"
},
"devDependencies": {
"@haventech/supertype": "6.x",
"@haventech/supertype": "6.0.1-beta.1",
"@types/bluebird": "*",
"@types/chai": "4.3.0",
"@types/mocha": "9.1.0",
Expand Down
Loading