1 |
|
2 |
|
3 |
|
4 |
|
5 | var koa = require('koa')
|
6 | , http = require('http')
|
7 | , request = require('supertest')
|
8 | , Resource = require('../lib/resource')
|
9 | , should = require('should');
|
10 |
|
11 | describe('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 | });
|