Issues (791)

test/request.js (6 issues)

1
var chai = require('chai');
2
var path = require('path');
3
4
var config = require('../src/cli').config
5
config.set({root: path.join(__dirname,'fixtures')})
6
7
var cmsData = require('../src/cli').cmsData
8
var Manager = require('../src/cli').Manager;
9
var fse = require('fs-extra');
10
11
describe('Request', function() {
12
  before( function(done) {
13
    Manager.instance.init()
14
      .then(function () {
15
        Manager.instance._whereKeys = ['title', 'priority', 'abe_meta', 'articles']
16
        Manager.instance.updateList()
17
18
        this.fixture = {
19
          tag: fse.readFileSync(path.join(__dirname, 'fixtures', 'templates', 'article.html'), 'utf8'),
20
          jsonArticle: fse.readJsonSync(path.join(__dirname, 'fixtures', 'data', 'article-1.json')),
21
          jsonHomepage: fse.readJsonSync(path.join(__dirname, 'fixtures', 'data', 'homepage-1.json'))
22
        }
23
        done()
24
        
25
      }.bind(this))
26
  });
27
28
  /**
29
   * cmsData.sql.executeQuery
30
   * 
31
   */
32
  it('cmsData.sql.executeQuery()', function(done) {
33
    try {
34
      var match = 'select * from ../'
35
      var jsonPage = {}
0 ignored issues
show
The variable jsonPage seems to be never used. Consider removing it.
Loading history...
36
      var res = cmsData.sql.handleSqlRequest(match, {})
37
38
      chai.assert.equal(res.string, 'select ["*"] from ["___abe_dot______abe_dot______abe___"] ', 'select not well formatted')
39
      done();
40
    } catch (x) {
41
      done(x);
42
    }
43
  });
44
45
  /**
46
   * cmsData.sql.keepOnlyPublishedPost
47
   * 
48
   */
49
  it('cmsData.sql.keepOnlyPublishedPost()', function() {
50
    var res = cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList())
51
    chai.expect(res).to.have.length(2);
52
  });
53
54
  /**
55
   * cmsData.sql.executeFromClause
56
   * 
57
   */
58
  it('cmsData.sql.executeFromClause()', function() {
59
    var res = cmsData.sql.executeFromClause(cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()), ['/'], ['/'])
60
    chai.expect(res).to.have.length(2);
61
  });
62
63
  it('cmsData.sql.executeWhereClause() =', function() {
64
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template`=`article`', {})
65
    var res = cmsData.sql.executeWhereClause(
66
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
67
      request.where,
68
      request.limit,
69
      request.columns, {}
70
    )
71
    chai.expect(res, '`abe_meta.template`=`article`').to.have.length(1);
72
    chai.assert.equal(res[0].title, 'article', 'expected select to find article but found ' + res[0].title);
73
74
    request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template`=`{{abe_meta.template}}`', this.fixture.jsonHomepage)
75
    res = cmsData.sql.executeWhereClause(
76
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
77
      request.where,
78
      request.limit,
79
      request.columns,
80
      this.fixture.jsonHomepage
81
    )
82
    chai.expect(res, '`abe_meta.template`=`{{abe_meta.template}}`').to.have.length(1);
83
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find homepage but found ' + res[0].title);
84
85
    request = cmsData.sql.handleSqlRequest('select title from ./ where `{{abe_meta.template}}`=`{{abe_meta.template}}`', this.fixture.jsonHomepage)
86
    res = cmsData.sql.executeWhereClause(
87
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
88
      request.where,
89
      request.limit,
90
      request.columns,
91
      this.fixture.jsonHomepage
92
    )
93
    chai.expect(res, '`{{abe_meta.template}}`=`{{abe_meta.template}}`').to.have.length(1);
94
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find homepage but found ' + res[0].title);
95
  });
96
  it('cmsData.sql.executeWhereClause() !=', function() {
97
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template`!=`homepage`', {})
98
    var res = cmsData.sql.executeWhereClause(
99
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
100
      request.where,
101
      request.limit,
102
      request.columns, {}
103
    )
104
    chai.expect(res, '`abe_meta.template`!=`homepage`').to.have.length(1);
105
    chai.assert.equal(res[0].title, 'article', 'expected select to find article but found ' + res[0].title);
106
  });
107
  it('cmsData.sql.executeWhereClause() >', function() {
108
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `priority`>`1`', {})
109
    var res = cmsData.sql.executeWhereClause(
110
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
111
      request.where,
112
      request.limit,
113
      request.columns,
114
      {}
115
    )
116
    chai.expect(res, '`priority`>`1`').to.have.length(1);
117
    chai.assert.equal(res[0].title, 'article', 'expected select to find article but found ' + res[0].title);
118
  });
119
  it('cmsData.sql.executeWhereClause() >=', function() {
120
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `priority`>=`1`', {})
121
    var res = cmsData.sql.executeWhereClause(
122
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
123
      request.where,
124
      request.limit,
125
      request.columns,
126
      {}
127
    )
128
    chai.expect(res, '`priority`>=`1`').to.have.length(2);
129
  });
130
  it('cmsData.sql.executeWhereClause() <', function() {
131
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `priority`<`1`', {})
132
    var res = cmsData.sql.executeWhereClause(
133
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
134
      request.where,
135
      request.limit,
136
      request.columns,
137
      {}
138
    )
139
    chai.expect(res, '`priority`<`1`').to.have.length(0);
140
  });
141
  it('cmsData.sql.executeWhereClause() <=', function() {
142
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `priority`<=`1`', {})
143
    var res = cmsData.sql.executeWhereClause(
144
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
145
      request.where,
146
      request.limit,
147
      request.columns,
148
      {}
149
    )
150
    chai.expect(res, ' `priority`<=`1`').to.have.length(1);
151
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find homepage but found ' + res[0].title);
152
  });
153
  it('cmsData.sql.executeWhereClause() LIKE', function() {
154
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template` LIKE `home`', {})
155
    var res = cmsData.sql.executeWhereClause(
156
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
157
      request.where,
158
      request.limit,
159
      request.columns,
160
      {}
161
    )
162
    chai.expect(res, '`abe_meta.template` LIKE `home`').to.have.length(1);
163
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find homepage but found ' + res[0].title);
164
  });
165
  it('cmsData.sql.executeWhereClause() NOT LIKE', function() {
166
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template` NOT LIKE `home`', {})
167
    var res = cmsData.sql.executeWhereClause(
168
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
169
      request.where,
170
      request.limit,
171
      request.columns,
172
      {}
173
    )
174
    chai.expect(res, '`abe_meta.template` NOT LIKE `home`').to.have.length(1);
175
    chai.assert.equal(res[0].title, 'article', 'expected select to find article but found ' + res[0].title);
176
  });
177
  it('cmsData.sql.executeWhereClause() AND', function() {
178
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template`=`homepage` AND title=`homepage`', {})
179
    var res = cmsData.sql.executeWhereClause(
180
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
181
      request.where,
182
      request.limit,
183
      request.columns,
184
      {}
185
    )
186
    chai.expect(res, '`abe_meta.template`=`homepage` AND title=`homepage`').to.have.length(1);
187
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find homepage but found ' + res[0].title);
188
  });
189
  it('cmsData.sql.executeWhereClause() OR', function() {
190
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template`=`homepage` OR `abe_meta.template`=`article`', {})
191
    var res = cmsData.sql.executeWhereClause(
192
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
193
      request.where,
194
      request.limit,
195
      request.columns,
196
      {}
197
    )
198
    chai.expect(res, '`abe_meta.template`=`homepage` OR `abe_meta.template`=`article`').to.have.length(2);
199
  });
200
  it('cmsData.sql.executeWhereClause() IN', function() {
201
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template` IN (`homepage`,`test`)', {})
202
    var res = cmsData.sql.executeWhereClause(
203
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
204
      request.where,
205
      request.limit,
206
      request.columns,
207
      {}
208
    )
209
    chai.expect(res, '`abe_meta.template` IN (`homepage`,`test`)').to.have.length(1);
210
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find homepage but found ' + res[0].title);
211
212
    request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template` IN (`{{articles}}`)', this.fixture.jsonHomepage)
213
    res = cmsData.sql.executeWhereClause(
214
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
215
      request.where,
216
      request.limit,
217
      request.columns,
218
      this.fixture.jsonHomepage
219
    )
220
    chai.expect(res, '`abe_meta.template` IN (`{{articles}}`').to.have.length(1);
221
    chai.assert.equal(res[0].title, 'article', 'expected select to find article but found ' + res[0].title);
222
223
    request = cmsData.sql.handleSqlRequest('select title from ./ where `articles[].title` IN (`{{articles}}`)', this.fixture.jsonHomepage)
224
    res = cmsData.sql.executeWhereClause(
225
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
226
      request.where,
227
      request.limit,
228
      request.columns,
229
      this.fixture.jsonHomepage
230
    )
231
    chai.expect(res, '`articles[].title` IN (`{{articles}}`').to.have.length(1);
232
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find article but found ' + res[0].title);
233
234
    request = cmsData.sql.handleSqlRequest('select title from ./ where `articles.title` IN (`{{articles}}`)', this.fixture.jsonHomepage)
235
    res = cmsData.sql.executeWhereClause(
236
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
237
      request.where,
238
      request.limit,
239
      request.columns,
240
      this.fixture.jsonHomepage
241
    )
242
    chai.expect(res, '`articles.title` IN (`{{articles}}`').to.have.length(1);
243
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find article but found ' + res[0].title);
244
245
    request = cmsData.sql.handleSqlRequest('select title from ./ where `articles.fakeAttribute` IN (`{{articles}}`)', this.fixture.jsonHomepage)
246
    res = cmsData.sql.executeWhereClause(
247
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
248
      request.where,
249
      request.limit,
250
      request.columns,
251
      this.fixture.jsonHomepage
252
    )
253
    chai.expect(res, '`articles.fakeAttribute` IN (`{{articles}}`').to.have.length(0);
254
255
    request = cmsData.sql.handleSqlRequest('select title from ./ where `fakekey.fakeAttribute` IN (`{{articles}}`)', this.fixture.jsonHomepage)
256
    res = cmsData.sql.executeWhereClause(
257
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
258
      request.where,
259
      request.limit,
260
      request.columns,
261
      this.fixture.jsonHomepage
262
    )
263
    chai.expect(res, '`fakekey.fakeAttribute` IN (`{{articles}}`').to.have.length(0);
264
  });
265
  it('cmsData.sql.executeWhereClause() NOT IN', function() {
266
    var request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template` NOT IN (`homepage`,`test`)', {})
267
    var res = cmsData.sql.executeWhereClause(
268
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
269
      request.where,
270
      request.limit,
271
      request.columns,
272
      {}
273
    )
274
    chai.expect(res, '`abe_meta.template` NOT IN (`homepage`,`test`)').to.have.length(1);
275
    chai.assert.equal(res[0].title, 'article', 'expected select to find article but found ' + res[0].title);
276
277
    request = cmsData.sql.handleSqlRequest('select title from ./ where `abe_meta.template` NOT IN (`{{articles}}`)', this.fixture.jsonHomepage)
278
    res = cmsData.sql.executeWhereClause(
279
      cmsData.sql.keepOnlyPublishedPost(Manager.instance.getList()),
280
      request.where,
281
      request.limit,
282
      request.columns,
283
      this.fixture.jsonHomepage
284
    )
285
    chai.expect(res, '`abe_meta.template` NOT IN (`{{articles}}`)').to.have.length(1);
286
    chai.assert.equal(res[0].title, 'homepage', 'expected select to find homepage but found ' + res[0].title);
287
  });
288
289
  it('cmsData.sql.getSourceType()', function() {
290
    chai.expect(cmsData.sql.getSourceType('http://google.com')).to.equal('url');
291
    chai.expect(cmsData.sql.getSourceType('select * from test')).to.equal('request');
292
    chai.expect(cmsData.sql.getSourceType('{"test":"test"}')).to.equal('value');
293
    chai.expect(cmsData.sql.getSourceType('references.json')).to.equal('file');
294
    chai.expect(cmsData.sql.getSourceType('test')).to.equal('other');
295
  });
296
297
  it('cmsData.source.requestList()', function(done) {
298
    var matches = cmsData.regex.getTagAbeTypeRequest(this.fixture.tag)
299
300
    chai.expect(matches[0][0]).to.not.be.null
0 ignored issues
show
The result of the property access to chai.expect(matches.0.0).to.not.be.null is not used.
Loading history...
301
302
    var attributes = cmsData.attributes.getAll(matches[0][0], {})
303
    chai.expect(matches[0][0]).to.not.be.null
0 ignored issues
show
The result of the property access to chai.expect(matches.0.0).to.not.be.null is not used.
Loading history...
304
305
    var jsonPage = {}
306
    cmsData.source.requestList(attributes, '', matches[0][0], jsonPage)
307
      .then(function () {
308
        chai.expect(jsonPage.abe_source).to.not.be.undefined
0 ignored issues
show
The result of the property access to chai.expect(jsonPage.abe...ce).to.not.be.undefined is not used.
Loading history...
309
        done()
310
      })
311
  });
312
313
  it('cmsData.sql.isInStatementCorrect()', function() {
314
    var values = {
315
      "left":"ok",
316
      "right":["ok","fok"]
317
    }
318
319
    var res = cmsData.sql.isInStatementCorrect(values, false)
320
    chai.assert.equal(res, true, 'expected to find true found ' + res);
321
322
    res = cmsData.sql.isInStatementCorrect(values, true)
323
    chai.assert.equal(res, false, 'expected to find false found ' + res);
324
325
    values = {
326
      "left":[
327
        "nok",
328
        "ok"
329
      ],
330
      "right":["ok","fok"]
331
    }
332
333
    res = cmsData.sql.isInStatementCorrect(values, false)
334
    chai.assert.equal(res, true, 'expected to find true found ' + res);
335
336
    res = cmsData.sql.isInStatementCorrect(values, true)
337
    chai.assert.equal(res, false, 'expected to find false found ' + res);
338
339
    var values = {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable values already seems to be declared on line 314. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
340
      "left":"nok",
341
      "right":["ok","fok"]
342
    }
343
344
    var res = cmsData.sql.isInStatementCorrect(values, false)
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable res already seems to be declared on line 319. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
345
    chai.assert.equal(res, false, 'expected to find false found ' + res);
346
347
    res = cmsData.sql.isInStatementCorrect(values, true)
348
    chai.assert.equal(res, true, 'expected to find true found ' + res);
349
350
    values = {
351
      "left":[
352
        "nok",
353
        "nok2"
354
      ],
355
      "right":["ok","fok"]
356
    }
357
358
    res = cmsData.sql.isInStatementCorrect(values, false)
359
    chai.assert.equal(res, false, 'expected to find false found ' + res);
360
361
    res = cmsData.sql.isInStatementCorrect(values, true)
362
    chai.assert.equal(res, true, 'expected to find true found ' + res);
363
  });
364
});
365