UNPKG

@scorpionknifes/fireo

Version:

Fork of Fireo, Google Cloud Firestore modern and simplest convenient ORM package in NodeJs. FireO is specifically designed for the Google's Firestore

83 lines (64 loc) 2.18 kB
const chai = require("chai"); const Model = require("../../../src/model/Model"); const BaseField = require("../../../src/fields/BaseField"); const { Fireo } = require("../../../index"); const expect = chai.expect; describe("CustomField", () => { before(() => { Fireo.connection.setting({ projectId: "fs-test-project" }); }); it("should modify Database value", async () => { class WeekDays extends BaseField { days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; setValue(value) { this.val = this.days[value]; } } class User extends Model { day = new WeekDays(); } const user = User.init(); user.day = 0; await user.save(); const doc = await User.collection.get({ key: user.key }); expect(doc.day).to.equal("Mon"); }); it("should able to modify value which is coming from Firestore", async () => { class WeekDays extends BaseField { days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; setValue(value) { this.val = this.days[value]; } async getDBValue() { return this.val + "-mod"; } } class User extends Model { day = new WeekDays(); } const user = User.init(); user.day = 0; await user.save(); const doc = await User.collection.get({ key: user.key }); expect(doc.day).to.equal("Mon-mod"); }); it("should able to support custom options", async () => { class EmailGenerator extends BaseField { static fieldOptions = ["prefix", "domain"]; option_prefix({ optionValue, fieldValue }) { return optionValue + "." + fieldValue; } option_domain({ optionValue, fieldValue }) { return fieldValue + "@" + optionValue; } } class User extends Model { email = new EmailGenerator({ prefix: "prefix", domain: "example.com" }); } const user = User.init(); user.email = "my_email"; await user.save(); const doc = await User.collection.get({ key: user.key }); expect(doc.email).to.equal("prefix.my_email@example.com"); }); });