UNPKG

4.24 kBJavaScriptView Raw
1/**
2 * Resource tests
3 */
4
5var koa = require('koa')
6 , http = require('http')
7 , request = require('supertest')
8 , Resource = require('../lib/resource')
9 , should = require('should');
10
11describe('Resource', function() {
12 it('creates new resource', function(done) {
13 var resource = new Resource('forums', {
14 index: function *() {},
15 show: function *() {}
16 });
17 resource.should.be.a('object');
18 resource.should.have.property('name', 'forums');
19 resource.should.have.property('id', 'forum');
20 resource.should.have.property('routes');
21 resource.routes.should.be.an.instanceOf(Array);
22 resource.routes.should.have.property(0);
23 resource.routes.should.have.property(1);
24 resource.routes[0].should.have.property('url', '/forums');
25 resource.routes[1].should.have.property('url', '/forums/:forum');
26 done();
27 });
28
29 it('nests resources', function(done) {
30 var app = koa();
31 var forums = new Resource('forums', {
32 index: function *() {}
33 });
34 var threads = new Resource('threads', {
35 index: function *() {},
36 show: function *() {
37 should.exist(this.params);
38 this.params.should.have.property('forum', '54');
39 this.params.should.have.property('thread', '12');
40 this.status = 200;
41 }
42 });
43 forums.add(threads);
44 threads.base.should.equal('/forums/:forum/threads');
45 app.use(threads.middleware());
46 app.use(threads.middleware());
47 request(http.createServer(app.callback()))
48 .get('/forums/54/threads/12')
49 .expect(200)
50 .end(function(err, res) {
51 if (err) return done(err);
52 done();
53 });
54 });
55
56 it('options.methods overrides action methods', function(done) {
57 var app = koa();
58 app.use(Resource('users', {
59 update: function *() {
60 this.status = 200;
61 }
62 }, {
63 methods: {
64 update: 'PATCH'
65 }
66 }).middleware());
67 request(http.createServer(app.callback()))
68 .patch('/users/123')
69 .expect(200)
70 .end(function(err, res) {
71 if (err) return done(err);
72 done();
73 });
74 });
75
76 it('routes top-level resource', function(done) {
77 var app = koa();
78 app.use(Resource({
79 index: function *() {
80 this.status = 200;
81 }
82 }).middleware());
83 request(http.createServer(app.callback()))
84 .get('/')
85 .expect(200)
86 .end(function(err, res) {
87 if (err) return done(err);
88 done();
89 });
90 });
91
92 it('doesn\'t call multiple controller actions', function(done) {
93 var app = koa();
94 var counter = 0;
95 function *increaseCounter() {
96 counter++;
97 this.status = 204;
98 }
99 app.use(Resource('threads', {
100 index: increaseCounter,
101 new: increaseCounter,
102 create: increaseCounter,
103 show: increaseCounter,
104 edit: increaseCounter,
105 update: increaseCounter,
106 destroy: increaseCounter,
107 }).middleware());
108 var server = http.createServer(app.callback());
109 request(server)
110 .get('/threads')
111 .expect(204)
112 .end(function(err, res) {
113 if (err) return done(err);
114 request(server)
115 .get('/threads/new')
116 .expect(204)
117 .end(function(err, res) {
118 if (err) return done(err);
119 request(server)
120 .post('/threads')
121 .expect(204)
122 .end(function(err, res) {
123 if (err) return done(err);
124 request(server)
125 .get('/threads/1234')
126 .expect(204)
127 .end(function(err, res) {
128 if (err) return done(err);
129 request(server)
130 .get('/threads/1234/edit')
131 .expect(204)
132 .end(function(err, res) {
133 if (err) return done(err);
134 request(server)
135 .put('/threads/1234')
136 .expect(204)
137 .end(function(err, res) {
138 if (err) return done(err);
139 request(server)
140 .get('/threads/1234')
141 .expect(204)
142 .end(function(err, res) {
143 if (err) return done(err);
144 counter.should.equal(7);
145 done();
146 });
147 });
148 });
149 });
150 });
151 });
152 });
153 });
154});