-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathnode.test.ts
More file actions
106 lines (92 loc) · 2.86 KB
/
node.test.ts
File metadata and controls
106 lines (92 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
* ObjectQL
* Copyright (c) 2026-present ObjectStack Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import request from 'supertest';
import { createServer } from 'http';
import { ObjectQL } from '@objectql/core';
import { createNodeHandler } from '../src/adapters/node';
import { IObjectQL, Driver } from '@objectql/types';
// Simple Mock Driver
class MockDriver implements Driver {
async init() {}
async find(objectName: string) {
if (objectName === 'user') {
return [{ id: 1, name: 'Alice' }];
}
return [];
}
async findOne() { return null; }
async create() { return { id: 2, name: 'Bob' }; }
async update() { return 1; }
async delete() { return 1; }
async count() { return 0; }
async execute() {}
}
describe('Node Adapter', () => {
let app: ObjectQL;
let server: any;
beforeAll(async () => {
app = new ObjectQL({
datasources: {
default: new MockDriver()
}
});
// Manual schema registration
app.metadata.register('object', {
type: 'object',
id: 'user',
content: {
name: 'user',
fields: {
name: { type: 'string' }
}
}
});
await app.init();
});
it('should handle find request', async () => {
const handler = createNodeHandler(app);
server = createServer(handler);
const response = await request(server)
.post('/')
.send({
op: 'find',
object: 'user',
args: {}
})
.set('Accept', 'application/json');
expect(response.status).toBe(200);
expect(response.body).toEqual({
items: [{ id: 1, name: 'Alice' }]
});
});
it('should handle create request', async () => {
const handler = createNodeHandler(app);
server = createServer(handler);
const response = await request(server)
.post('/')
.send({
op: 'create',
object: 'user',
args: { data: { name: 'Bob' } }
});
expect(response.status).toBe(200);
expect(response.body).toEqual({
id: 2,
name: 'Bob',
'@type': 'user'
});
});
it('should return 200 with welcome page for GET root', async () => {
const handler = createNodeHandler(app);
server = createServer(handler);
const response = await request(server).get('/');
expect(response.status).toBe(200);
expect(response.headers['content-type']).toContain('text/html');
expect(response.text).toContain('ObjectQL Server');
});
});