UNPKG

@tiledesk/tiledesk-server

Version:
383 lines (290 loc) 13.1 kB
process.env.NODE_ENV = 'test'; process.env.QUOTES_ENABLED = 'true'; const { QuoteManager } = require('../services/QuoteManager'); const pubModulesManager = require('../pubmodules/pubModulesManager'); // on constructor init is undefined beacusae pub module is loaded after var projectService = require('../services/projectService'); var userService = require('../services/userService'); let chai = require('chai'); let chaiHttp = require('chai-http'); let server = require('../app'); let should = chai.should(); let expect = require('chai').expect; let assert = require('chai').assert; chai.use(chaiHttp); // MOCK const projectMock = require('./mock/projectMock'); const requestMock = require('./mock/requestMock'); const messageMock = require('./mock/messageMock'); const emailMock = require('./mock/emailMock'); const { MockTdCache } = require('./mock/tdCacheMock'); const mockTdCache = new MockTdCache(); let log = false; // CONNECT REDIS - CHECK IT const { TdCache } = require('../utils/TdCache'); let tdCache = new TdCache({ host: process.env.CACHE_REDIS_HOST || '127.0.0.1', port: process.env.CACHE_REDIS_PORT || '6379', password: process.env.CACHE_REDIS_PASSWORD || undefined }); tdCache.connect(); // var redis = require('redis') // var redis_client; // const dateList = [ // "2023-10-17T08:45:54.058Z", // "2023-10-20T08:45:54.058Z", // "2023-10-28T08:45:54.058Z", // "2023-10-31T08:45:54.058Z", // "2023-11-19T08:45:54.058Z", // "2023-11-22T08:45:54.058Z", // "2023-11-27T08:45:54.058Z", // "2023-12-01T08:45:54.058Z", // "2023-12-20T08:45:54.058Z", // "2023-12-21T08:45:54.058Z" // ] const dateList = [ "2023-10-24T08:45:54.058Z", "2023-10-25T08:45:54.058Z", "2023-10-26T08:45:54.058Z", "2023-10-27T08:45:54.058Z", "2023-10-28T08:45:54.058Z", "2023-10-29T08:45:54.058Z" ] const dateListStress = [ "2024-02-05T10:30:00.058Z", "2024-03-05T10:30:00.058Z", "2024-04-05T10:30:00.058Z", "2024-05-05T10:30:00.058Z", "2024-06-05T10:30:00.058Z", "2024-07-05T10:30:00.058Z", "2024-08-05T10:30:00.058Z", "2024-09-05T10:30:00.058Z", "2024-10-05T10:30:00.058Z", "2024-11-05T10:30:00.058Z", "2024-12-05T10:30:00.058Z", "2025-01-05T10:30:00.058Z", "2025-02-05T10:30:00.058Z", "2025-03-05T10:30:00.058Z" ] const expectedSlotStarts = [ "1/31/2024", "2/29/2024", "3/31/2024", "4/30/2024", "5/31/2024", "6/30/2024", "7/31/2024", "8/31/2024", "9/30/2024", "10/31/2024", "11/30/2024", "12/31/2024", "1/31/2025", "2/28/2025", "3/31/2025" ] const _expectedSlotStarts_PRE = [ "31/01/2024", "29/02/2024", "31/03/2024", "30/04/2024", "31/05/2024", "30/06/2024", "31/07/2024", "31/08/2024", "30/09/2024", "31/10/2024", "30/11/2024", "31/12/2024", "31/01/2025", "28/02/2025", "31/03/2025" ] // connectRedis(); // function connectRedis() { // console.log(">>> connectRedis") // redis_client = redis.createClient({ // host: "127.0.0.1", // port: 6379, // }); // redis_client.on('error', err => { // console.log('(quoteManager TEST) Connect Redis Error ' + err); // }) // redis_client.on('ready', () => { // console.log("(quoteManager TEST) Redis ready!") // }) // } // let cacheClient = undefined; // if (pubModulesManager.cache) { // cacheClient = pubModulesManager.cache._cache._cache; //_cache._cache to jump directly to redis modules without cacheoose wrapper (don't support await) // } // let tdCache = undefined; // if (cacheClient) { // tdCache = cacheClient; // console.log("using 'cacheClient' for the test") // } else if (redis_client) { // tdCache = redis_client // console.log("using 'redis_client' for the test") // } else { // tdCache = mockTdCache; // console.log("using 'mockTdCache' for the test") // } let quoteManager = new QuoteManager({ tdCache: tdCache }); quoteManager.start(); describe('QuoteManager', function () { it('incrementRequestsCountStress', (done) => { /** * For this test the subscription starts on 31 Genuary. * Slots must start on 31 Gen, 28/29 Feb, 31 Mar, 30 Apr, ... */ let mockProject = projectMock.mockProjectPremiumPlan2; let mockRequest = requestMock.requestMock; if (log) { console.log("Starting stress test with one year long cycle of renewals") } let i = 0; async function test(date) { mockRequest.createdAt = new Date(date); let key_incremented = await quoteManager.incrementRequestsCount(mockProject, mockRequest); if (log) { console.log("request_date: ", mockRequest.createdAt, "key_incremented: ", key_incremented); } let slot_start = key_incremented.substring(key_incremented.lastIndexOf(':') + 1) expect(slot_start).to.equal(expectedSlotStarts[i]); i += 1; if (i < dateListStress.length) { setTimeout(() => { test(dateListStress[i]) }, 250); } else { if (log) { console.log("All dates tested successfully."); } done(); } } test(dateListStress[0]); }).timeout(10000) it('incrementRequestsCount', async function () { let mockProject = projectMock.mockProjectBasicPlan; let mockRequest = requestMock.requestMock; mockRequest.createdAt = new Date(dateList[0]); let initial_quote = await quoteManager.getCurrentQuote(mockProject, mockRequest, 'requests'); if (log) { console.log("[Quote Test] initial_quote: ", initial_quote); } let key_incremented = await quoteManager.incrementRequestsCount(mockProject, mockRequest); if (log) { console.log("[Quote Test] key_incremented: ", key_incremented); } let final_quote = await quoteManager.getCurrentQuote(mockProject, mockRequest, 'requests'); if (log) { console.log("[Quote Test] final_quote: ", final_quote); } expect(key_incremented).to.equal("quotes:requests:64e36f5dbf72263f7c059999:10/20/2023"); expect(final_quote).to.equal(initial_quote + 1); }) it('incrementMessagesCount', async function () { let mockProject = projectMock.mockProjectSandboxPlan; let mockMessage = messageMock.messageMock; mockMessage.createdAt = new Date(); let initial_quote = await quoteManager.getCurrentQuote(mockProject, mockMessage, 'messages'); if (log) { console.log("[Quote Test] initial_quote: ", initial_quote); } let key_incremented = await quoteManager.incrementMessagesCount(mockProject, mockMessage); if (log) { console.log("[Quote Test] key_incremented: ", key_incremented); } let final_quote = await quoteManager.getCurrentQuote(mockProject, mockMessage, 'messages'); if (log) { console.log("[Quote Test] current quote: ", final_quote); } //expect(key_incremented).to.equal("quotes:messages:64e36f5dbf72263f7c059999:20/10/2023"); expect(final_quote).to.equal(initial_quote + 1); }) it('incrementEmailCount', async function () { let mockProject = projectMock.mockProjectSandboxPlan; let mockEmail = emailMock.emailMock; let result = await quoteManager.checkQuote(mockProject, mockEmail, 'email'); if (log) { console.log("checkQuote result: ", result) } let initial_quote = await quoteManager.getCurrentQuote(mockProject, mockEmail, 'email'); if (log) { console.log("[Quote Test] initial_quote: ", initial_quote); } let key_incremented = await quoteManager.incrementEmailCount(mockProject, mockEmail); if (log) { console.log("[Quote Test] key_incremented: ", key_incremented); } let final_quote = await quoteManager.getCurrentQuote(mockProject, mockEmail, 'email'); if (log) { console.log("[Quote Test] current quote: ", final_quote); } expect(key_incremented).to.equal("quotes:email:64e36f5dbf72263f7c059999:10/20/2023"); expect(final_quote).to.equal(initial_quote + 1); }) it('sendEmailDirect', (done) => { var email = "test-signup-" + Date.now() + "@email.com"; var pwd = "pwd"; userService.signup(email, pwd, "Test Firstname", "Test lastname").then(function (savedUser) { projectService.create("test-send-email-direct", savedUser._id).then(function (savedProject) { chai.request(server) .post('/' + savedProject._id + '/emails/internal/send') .auth(email, pwd) .send({ to: "giovanni.troisiub@gmail.com", text: "Hello", subject: "HelloSub", replyto: "giovanni.troisiub@gmail.com" }) .end((err, res) => { if (err) { console.error("email internal send err: ", err); } if (log) { console.log("email internal send res.body", res.body); } done(); }); }); }); }) it('incrementTokensCount', (done) => { var email = "test-quote-" + Date.now() + "@email.com"; var pwd = "pwd"; userService.signup(email, pwd, "Test Firstname", "Test Lastname").then((savedUser) => { projectService.create("quote-project", savedUser._id).then((savedProject) => { let createdAt = new Date(); createdAt.setDate(createdAt.getDate() + 1) chai.request(server) .post('/' + savedProject._id + "/openai/quotes") .auth(email, pwd) .send({ createdAt: createdAt , tokens: 128, multiplier: 25 }) .end((err, res) => { if (err) { console.error("err: ", err); } if (log) { console.log("res.body", res.body )}; res.should.have.status(200); res.body.should.be.a('object'); const options = { day: '2-digit', month: '2-digit', year: 'numeric', }; let date = new Date().toLocaleDateString(undefined, options); let key = "quotes:tokens:" + savedProject._id + ":" + date; let message_resp = "value incremented for key " + key; // CHECK IT!!!! //expect(res.body.message).to.equal(message_resp); //expect(res.body.key).to.equal(key); let expected_quote = 128 * 25; expect(res.body.currentQuote).to.equal(expected_quote); done(); }) }) }) }) // it('incrementRequestCountMulti', async function () { // let mockProject = projectMock.mockProjectSandboxPlan; // let mockRequest = requestMock.requestMock; // let quoteManager = new QuoteManager({ project: mockProject, tdCache: tdCache }); // for (let date of dateList) { // mockRequest.createdAt = new Date(date); // let result = await quoteManager.incrementRequestsCount(mockRequest); // console.log("result: ", result); // console.log("\n\n"); // } // }) // it('incrementRequestCountLimitReached', async function () { // let mockProject = projectMock.mockProjectSandboxPlan; // let mockRequest = requestMock.requestMock; // // for the test the limit is fixed to 5 // let i; // let quoteManager = new QuoteManager({ project: mockProject, tdCache: tdCache }); // for (i = 0; i < 5; i++) { // mockRequest.createdAt = new Date(dateList[i]); // await quoteManager.incrementRequestsCount(mockRequest); // } // mockRequest.createdAt = new Date(dateList[i]); // let result = await quoteManager.incrementRequestsCount(mockRequest); // console.log("result: ", result); // }) // it('getCurrentCount', async function() { // let mockProject = projectMock.mockProjectSandboxPlan; // let mockRequest = requestMock.requestMock; // let quoteManager = new QuoteManager({ project: mockProject, tdCache: mockTdCache } ); // for (let date of dateList) { // mockRequest.createdAt = new Date(date); // let result = await quoteManager.incrementRequestCount(mockRequest); // console.log("result: ", result); // } // let today = new Date('2023-12-22T08:45:54.058Z'); // let quote = await quoteManager.getCurrentQuote(today, 'requests'); // console.log("request quote: ", quote) // }) })