@tiledesk/tiledesk-server
Version:
The Tiledesk server module
998 lines (791 loc) • 115 kB
JavaScript
//During the test the env variable is set to test
process.env.NODE_ENV = 'test';
process.env.GPTKEY = "fakegptkey";
process.env.LOG_LEVEL = 'critical'
process.env.KB_WEBHOOK_TOKEN = "testtoken"
process.env.PINECONE_INDEX = "test-index";
process.env.PINECONE_TYPE = "serverless";
process.env.PINECONE_INDEX_HYBRID = "test-index-hybrid";
process.env.PINECONE_TYPE_HYBRID = "serverless";
process.env.ADMIN_EMAIL = "admin@tiledesk.com";
process.env.KB_ENDPOINT_TRAIN = "http://kb-train.test";
process.env.ACTIVITY_HISTORY_ENABLED = true;
var userService = require('../services/userService');
var projectService = require('../services/projectService');
var faqService = require('../services/faqService');
let log = false;
var config = require('../config/global');
//Require the dev-dependencies
let chai = require('chai');
let chaiHttp = require('chai-http');
let server = require('../app');
let should = chai.should();
var fs = require('fs');
const path = require('path');
const mongoose = require('mongoose');
const nock = require('nock');
const faq = require('../models/faq');
const { Namespace } = require('../models/kb_setting');
const default_engine = require('../config/kb/engine');
// chai.config.includeStack = true;
var expect = chai.expect;
var assert = chai.assert;
let custom_profile_sample = {
name: "Custom",
type: "payment",
subStart: new Date(),
subEnd: new Date(new Date().setFullYear(new Date().getFullYear() + 1)),
customization: { hybrid: true }
}
mongoose.connect(config.databasetest);
chai.use(chaiHttp);
describe('KbRoute', () => {
describe('Namespaces', () => {
/**
* Get all namespaces of a project.
* If there isn't namespaces for a project_id, the default namespace is created and returned.
*/
it('get-all-namespaces', (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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get all namespaces res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('array');
expect(res.body.length).to.equal(1);
should.not.exist(res.body[0]._id);
expect(res.body[0].id).to.equal(savedProject._id.toString());
expect(res.body[0].name).to.equal("Default");
should.exist(res.body[0].engine);
expect(res.body[0].engine.name).to.equal('pinecone');
expect(res.body[0].engine.type).to.equal('serverless');
expect(res.body[0].engine.vector_size).to.equal(1536);
expect(res.body[0].engine.index_name).to.equal('test-index');
should.exist(res.body[0].embedding);
expect(res.body[0].embedding.provider).to.equal('openai')
expect(res.body[0].embedding.name).to.equal('text-embedding-ada-002')
expect(res.body[0].embedding.dimension).to.equal(1536)
expect(res.body[0].embedding.api_key).to.equal('')
done();
})
});
});
})
it('create-namespaces-with-engine-similarity', (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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.post('/' + savedProject._id + '/kb/namespace')
.auth(email, pwd)
.send({ name: "MyCustomNamespace" })
.end((err, res) => {
if (err) { console.error("err: ", err) }
if (log) { console.log("create new namespace res.body: ", res.body) }
res.should.have.status(200);
res.body.should.be.a('object');
should.not.exist(res.body._id)
should.exist(res.body.id)
expect(res.body.name).to.equal('MyCustomNamespace');
should.exist(res.body.engine)
expect(res.body.engine.name).to.equal('pinecone');
expect(res.body.engine.type).to.equal('serverless');
expect(res.body.engine.vector_size).to.equal(1536);
expect(res.body.engine.index_name).to.equal('test-index');
should.exist(res.body.embedding);
expect(res.body.embedding.provider).to.equal('openai')
expect(res.body.embedding.name).to.equal('text-embedding-ada-002')
expect(res.body.embedding.dimension).to.equal(1536)
expect(res.body.embedding.api_key).to.equal('')
// Get again all namespace. A new default namespace should not be created.
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get all namespaces res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('array');
expect(res.body.length).to.equal(1);
should.not.exist(res.body[0]._id);
should.exist(res.body[0].id);
expect(res.body[0].embedding.api_key).to.equal('');
done();
})
})
});
});
})
it('create-namespaces-with-engine-hybrid-rejected', (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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.post('/' + savedProject._id + '/kb/namespace')
.auth(email, pwd)
.send({ name: "MyCustomNamespace", hybrid: true })
.end((err, res) => {
if (err) { console.error("err: ", err) }
if (log) { console.log("create new namespace res.body: ", res.body) }
res.should.have.status(403);
res.body.should.be.a('object');
expect(res.body.success).to.equal(false);
expect(res.body.error).to.equal('Hybrid mode is not allowed for the current project');
done();
})
});
});
})
it('create-namespaces-with-engine-hybrid-accepted', (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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.post('/auth/signin')
.send({ email: "admin@tiledesk.com", password: "adminadmin" })
.end((err, res) => {
if (err) { console.error("err: ", err) }
if (log) { console.log("login with superadmin res.body: ", res.body) };
res.should.have.status(200);
res.body.should.be.a('object');
expect(res.body.success).to.equal(true);
expect(res.body.token).not.equal(null);
let superadmin_token = res.body.token;
chai.request(server)
.put('/projects/' + savedProject._id)
.set('Authorization', superadmin_token)
.send({ profile: custom_profile_sample })
.end((err, res) => {
if (err) { console.error("err: ", err) }
if (log) { console.log("update project res.body: ", res.body) }
res.should.have.status(200);
res.body.should.be.a('object');
expect(res.body.profile.customization.hybrid).to.equal(true);
chai.request(server)
.post('/' + savedProject._id + '/kb/namespace')
.auth(email, pwd)
.send({ name: "MyCustomNamespace", hybrid: true })
.end((err, res) => {
if (err) { console.error("err: ", err) }
if (log) { console.log("create new namespace res.body: ", res.body) }
res.should.have.status(200);
res.body.should.be.a('object');
should.not.exist(res.body._id)
should.exist(res.body.id)
expect(res.body.name).to.equal('MyCustomNamespace');
should.exist(res.body.engine)
expect(res.body.engine.name).to.equal('pinecone');
expect(res.body.engine.type).to.equal('serverless');
expect(res.body.engine.vector_size).to.equal(1536);
expect(res.body.engine.index_name).to.equal('test-index-hybrid');
should.exist(res.body.embedding);
expect(res.body.embedding.provider).to.equal('openai')
expect(res.body.embedding.name).to.equal('text-embedding-ada-002')
expect(res.body.embedding.dimension).to.equal(1536)
expect(res.body.embedding.api_key).to.equal('')
done();
})
})
})
})
});
})
it('import-namespace', (done) => {
var email = "test-signup-" + Date.now() + "@email.com";
var pwd = "pwd";
userService.signup(email, pwd, "Test Firstname", "Test Lastname").then((savedUser) => {
projectService.create("test-namespace-import", savedUser._id).then((savedProject) => {
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get all namespaces res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('array');
expect(res.body[0].name).to.equal("Default");
let namespace_id = res.body[0].id;
chai.request(server)
.post('/' + savedProject._id + '/kb/namespace/import/' + namespace_id)
.auth(email, pwd)
//.set('Content-Type', 'text/plain')
.attach('uploadFile', fs.readFileSync(path.resolve(__dirname, './fixtures/exported_namespace.json')), 'exported_namespace.json')
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("import contents res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('object');
expect(res.body.success).to.equal(true);
expect(res.body.message).to.equal("Contents imported successfully");
res.body.schedule_json.should.be.a('array');
expect(res.body.schedule_json.length).to.equal(3);
expect(res.body.schedule_json[0].embedding.api_key).to.equal('fakegptkey');
chai.request(server)
.get('/' + savedProject._id + '/kb/?namespace=' + namespace_id)
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get namespace res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('object');
expect(res.body.count).to.equal(3);
expect(res.body.kbs.length).to.equal(3);
let content_with_tags = res.body.kbs.find(kb => kb.source === 'Example content');
expect(content_with_tags.tags.length).to.equal(2);
expect(content_with_tags.tags[0]).to.equal('tag1');
expect(content_with_tags.tags[1]).to.equal('tag2');
let content_without_tags = res.body.kbs.find(kb => kb.source !== 'Example content');
expect(content_without_tags.tags).to.equal(undefined);
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get all namespaces res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('array');
expect(res.body.length).to.equal(1);
expect(res.body[0].id).to.equal(namespace_id);
expect(res.body[0].name).to.equal("Default");
expect(res.body[0].embedding.api_key).to.equal('');
done();
})
})
})
})
})
})
})
/**
* Update namespaces
*/
it('update-namespace', (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-faqkb-create", savedUser._id).then(function (savedProject) {
// Get all namespaces. Create default namespace and return.
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get all namespaces res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('array');
expect(res.body.length).to.equal(1);
expect(res.body[0].id).to.equal(savedProject._id.toString());
expect(res.body[0].name).to.equal("Default");
let namespace_id = res.body[0].id;
let new_settings = {
model: 'gpt-4o',
max_tokens: 256,
temperature: 0.3,
top_k: 6,
context: "You are an awesome AI Assistant."
}
// Update namespace
chai.request(server)
.put('/' + savedProject._id + '/kb/namespace/' + namespace_id)
.auth(email, pwd)
.send({ name: "New Name", preview_settings: new_settings })
.end((err, res) => {
if (err) { console.error("err: ", err) }
if (log) { console.log("update namespace res.body: ", res.body) }
res.should.have.status(200);
res.body.should.be.a('object');
should.not.exist(res.body._id);
should.exist(res.body.id);
expect(res.body.name).to.equal('New Name');
expect(res.body.preview_settings.model).to.equal('gpt-4o')
expect(res.body.preview_settings.max_tokens).to.equal(256)
expect(res.body.preview_settings.temperature).to.equal(0.3)
expect(res.body.preview_settings.top_k).to.equal(6)
expect(res.body.embedding.api_key).to.equal('')
done();
})
})
});
});
})
it('embedding-api-key-never-persisted', (done) => {
const namespaceId = new mongoose.Types.ObjectId().toString();
const projectId = new mongoose.Types.ObjectId().toString();
const ns = new Namespace({
id_project: projectId,
id: namespaceId,
name: 'ApiKeyTest',
preview_settings: {
model: 'gpt-4o',
max_tokens: 256,
temperature: 0.7,
top_k: 4,
context: null
},
engine: default_engine,
embedding: {
provider: 'openai',
name: 'text-embedding-ada-002',
dimension: 1536,
api_key: 'must-not-persist'
}
});
ns.save()
.then((saved) => {
expect(saved.embedding.api_key).to.equal('');
return Namespace.findOne({ id: namespaceId }).lean();
})
.then((doc) => {
expect(doc.embedding.api_key).to.equal('');
return Namespace.deleteOne({ _id: doc._id });
})
.then(() => done())
.catch(done);
})
/**
* Delete default namespace - Forbidden
*/
it('fail-to-delete-default-namespace', (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-faqkb-create", savedUser._id).then(function (savedProject) {
// Get all namespaces. Create default namespace and return.
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get all namespaces res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('array');
expect(res.body.length).to.equal(1);
expect(res.body[0].id).to.equal(savedProject._id.toString());
expect(res.body[0].name).to.equal("Default");
let namespace_id = res.body[0].id;
// Update namespace
chai.request(server)
.delete('/' + savedProject._id + '/kb/namespace/' + namespace_id)
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err) }
if (log) { console.log("delete namespace res.body: ", res.body) }
res.should.have.status(403);
res.body.should.be.a('object');
expect(res.body.success).to.equal(false);
expect(res.body.error).to.equal('Default namespace cannot be deleted');
done();
})
})
});
});
})
it('get-chatbots-from-namespace', (done) => {
var email = "test-signup-" + Date.now() + "@email.com";
var pwd = "pwd";
userService.signup(email, pwd, "Test Firstname", "Test Lastname").then((savedUser) => {
projectService.create('test-faqkb-create', savedUser._id).then((savedProject) => {
faqService.create(savedProject._id, savedUser._id, { name: "testbot1" }).then((savedBot1) => {
faqService.create(savedProject._id, savedUser._id, { name: "testbot2" }).then((savedBot2) => {
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get all namespaces res.body: ", res.body); }
res.should.have.status(200);
let namespace_id = res.body[0].id;
if (log) { console.log("namespace_id: ", namespace_id) }
let newFaq1 = new faq({
id_faq_kb: savedBot1._id,
id_project: savedProject._id,
intent_id: "new-faq-1",
createdBy: savedUser._id,
updatedBy: savedUser._id,
actions: [{ "_tdActionType": "askgptv2", "_tdActionId": "f58212f9-1a8c-4623-b6fa-0f34e57d9999", "namespace": namespace_id }]
})
newFaq1.save((err, saved1) => {
if (err) { console.error("err1: ", err) };
if (log) { console.log("faq1 saved: ", saved1) };
let newFaq2 = new faq({
id_faq_kb: savedBot2._id,
id_project: savedProject._id,
intent_id: "new-faq-2",
createdBy: savedUser._id,
updatedBy: savedUser._id,
actions: [{ "_tdActionType": "reply", "_tdActionId": "f58212f9-1a8c-4623-b6fa-0f34e57d9998" }]
})
newFaq2.save((err, saved2) => {
if (err) { console.error("err2: ", err) };
if (log) { console.log("faq2 saved: ", saved2) };
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/' + namespace_id + '/chatbots')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err) };
if (log) { console.log("get chatbots from namespace res.body: ", res.body) };
res.should.have.status(200);
res.body.should.be.a('array');
expect(res.body.length).to.equal(1);
expect(res.body[0]._id).to.equal((savedBot1._id).toString());
expect(res.body[0].name).to.equal('testbot1');
done();
})
})
})
})
})
})
})
})
}).timeout(10000)
})
describe('Contents', () => {
it('add-new-content', (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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get namespaces res.body: ", res.body); }
res.should.have.status(200);
expect(res.body.length).to.equal(1);
expect(res.body[0].engine.index_name).to.equal('test-index');
let namespace_id = res.body[0].id;
let kb = {
name: "example_name5",
type: "url",
source: "https://www.exampleurl5.com",
content: "",
namespace: namespace_id,
tags: ["test", "example"]
}
chai.request(server)
.post('/' + savedProject._id + '/kb')
.auth(email, pwd)
.send(kb)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("create kb res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('object');
expect(res.body.success).to.equal(true);
expect(res.body.message).to.equal("Schedule scrape skipped in test environment");
let realResponse = res.body.data;
expect(realResponse.lastErrorObject.updatedExisting).to.equal(false);
expect(realResponse.value.id_project).to.equal(namespace_id)
expect(realResponse.value.namespace).to.equal(namespace_id)
expect(realResponse.value.name).to.equal("example_name5")
expect(realResponse.value.type).to.equal("url")
expect(realResponse.value.source).to.equal("https://www.exampleurl5.com")
expect(realResponse.value.status).to.equal(-1)
expect(realResponse.value.tags.length).to.equal(2);
expect(realResponse.value.tags[0]).to.equal("test");
expect(realResponse.value.tags[1]).to.equal("example");
should.not.exist(realResponse.engine)
should.not.exist(realResponse.value.engine)
should.not.exist(realResponse.embedding)
should.not.exist(realResponse.value.embedding)
let scheduleJson = res.body.schedule_json;
expect(scheduleJson.namespace).to.equal(namespace_id)
expect(scheduleJson.id_project).to.equal(namespace_id)
expect(scheduleJson.type).to.equal("url")
expect(scheduleJson.source).to.equal("https://www.exampleurl5.com")
expect(scheduleJson.hybrid).to.equal(false);
expect(scheduleJson.tags.length).to.equal(2);
expect(scheduleJson.tags[0]).to.equal("test");
expect(scheduleJson.tags[1]).to.equal("example");
should.exist(scheduleJson.engine)
should.exist(scheduleJson.embedding)
expect(scheduleJson.embedding.api_key).to.equal('fakegptkey');
done();
})
})
});
});
})
it('add-new-text-content', (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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get namespaces res.body: ", res.body); }
res.should.have.status(200);
expect(res.body.length).to.equal(1);
let namespace_id = res.body[0].id;
if (log) { console.log("namespace_id: ", namespace_id); }
let kb = {
name: "example_text1",
type: "text",
source: "example_text1",
content: "Example text",
namespace: namespace_id,
tags: ["test", "example"]
}
chai.request(server)
.post('/' + savedProject._id + '/kb')
.auth(email, pwd)
.send(kb) // can be empty
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("create kb res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('object');
let realResponse = res.body.data;
expect(realResponse.value.id_project).to.equal(namespace_id)
expect(realResponse.value.name).to.equal("example_text1")
expect(realResponse.value.type).to.equal("text")
expect(realResponse.value.source).to.equal("example_text1")
expect(realResponse.value.status).to.equal(-1)
expect(typeof realResponse.value.scrape_type === "undefined").to.be.true;
expect(typeof realResponse.value.scrape_options === "undefined").to.be.true;
expect(realResponse.value.tags.length).to.equal(2);
expect(realResponse.value.tags[0]).to.equal("test");
expect(realResponse.value.tags[1]).to.equal("example");
done();
})
})
});
});
})
it('update-content', (done) => {
const kbTrainUrl = process.env.KB_ENDPOINT_TRAIN;
const deleteScope = nock(kbTrainUrl)
.post('/delete/id')
.reply(200, { success: true });
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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
res.should.have.status(200);
let namespace_id = res.body[0].id;
let kb = {
name: "example_text_update",
type: "text",
source: "example_text_update",
content: "Original text",
namespace: namespace_id
};
chai.request(server)
.post('/' + savedProject._id + '/kb')
.auth(email, pwd)
.send(kb)
.end((err, res) => {
if (err) { console.error("err: ", err); }
res.should.have.status(200);
let kb_id = res.body.data.value._id;
chai.request(server)
.put('/' + savedProject._id + '/kb/' + kb_id)
.auth(email, pwd)
.send({
name: "example_text_update",
type: "text",
source: "example_text_update",
content: "Updated text",
namespace: namespace_id
})
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("update content res.body: ", res.body); }
res.should.have.status(200);
expect(res.body.success).to.equal(true);
expect(res.body.message).to.equal("Schedule scrape skipped in test environment");
expect(res.body.data.content).to.equal("Updated text");
should.exist(res.body.schedule_json.embedding);
expect(res.body.schedule_json.embedding.api_key).to.equal('fakegptkey');
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
expect(res.body[0].embedding.api_key).to.equal('');
expect(deleteScope.isDone()).to.equal(true);
nock.cleanAll();
done();
});
});
});
});
});
});
}).timeout(10000)
it('delete-content', (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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get namespaces res.body: ", res.body); }
res.should.have.status(200);
let namespace_id = res.body[0].id;
let kb = {
name: "example_text_delete",
type: "text",
source: "example_text_delete",
content: "Example text",
namespace: namespace_id
}
chai.request(server)
.post('/' + savedProject._id + '/kb')
.auth(email, pwd)
.send(kb)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("create kb res.body: ", res.body); }
res.should.have.status(200);
let kb_id = res.body.data.value._id;
chai.request(server)
.delete('/' + savedProject._id + '/kb/' + kb_id)
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("delete kb res.body: ", res.body); }
res.should.have.status(200);
expect(res.body.success).to.equal(true);
expect(res.body.message).to.equal("Content deleted successfully");
done();
})
})
})
})
})
})
it('get-content-chunks', (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-faqkb-create", savedUser._id).then(function (savedProject) {
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get namespaces res.body: ", res.body); }
res.should.have.status(200);
expect(res.body.length).to.equal(1);
let namespace_id = res.body[0].id;
let kb = {
name: "example_text1",
type: "text",
source: "example_text1",
content: "Example text",
namespace: namespace_id
}
chai.request(server)
.post('/' + savedProject._id + '/kb')
.auth(email, pwd)
.send(kb) // can be empty
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("create kb res.body: ", res.body); }
res.should.have.status(200);
res.body.should.be.a('object');
let realResponse = res.body.data;
let content_id = realResponse.value._id;
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/' + namespace_id + '/chunks/' + content_id)
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err )};
if (log) { console.log("res.body: ", res.body )};
res.should.have.status(200);
/**
* Unable to verify the response due to an external request
*/
expect(res.body.success).to.equal(true);
expect(res.body.message).to.equal("Get chunks skipped in test environment");
done();
})
})
})
});
});
})
it('get-contents-with-queries', (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-faqkb-create", savedUser._id).then(function (savedProject) {
/**
* Get all namespace. If no namespace exists, a default namespace is created and returned
*/
chai.request(server)
.get('/' + savedProject._id + '/kb/namespace/all')
.auth(email, pwd)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("get namespaces res.body: ", res.body); }
res.should.have.status(200);
expect(res.body[0].name === 'Default');
expect(res.body[0].id === savedProject._id);
let namespace_id = res.body[0].id;
let kb1 = {
name: "example_name1",
type: "url",
namespace: namespace_id,
source: "https://www.exampleurl1.com",
content: ""
}
let kb2 = {
name: "example_name2",
type: "text",
namespace: namespace_id,
source: "example_name2",
content: "example content"
}
let kb3 = {
name: "example_name3",
type: "url",
namespace: namespace_id,
source: "https://www.exampleurl3.com",
content: ""
}
/**
* Add contents to default namespace
*/
chai.request(server)
.post('/' + savedProject._id + "/kb")
.auth(email, pwd)
.send(kb1)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("create kb1 res.body: ", res.body); }
res.should.have.status(200);
setTimeout(() => {
chai.request(server)
.post('/' + savedProject._id + "/kb")
.auth(email, pwd)
.send(kb2)
.end((err, res) => {
if (err) { console.error("err: ", err); }
if (log) { console.log("create kb2 res.body: ", res.body); }
res.should.have.status(200);
setTimeout(() => {
chai.request(server)
.post('/' + savedProject._id + "/kb