apostrophe 2.221.0 → 2.221.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/modules/apostrophe-caches/index.js +23 -1
  3. package/lib/modules/apostrophe-soft-redirects/index.js +21 -14
  4. package/package.json +1 -1
  5. package/test/caches.js +29 -0
  6. package/test/soft-redirects.js +16 -3
  7. package/.nyc_output/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +0 -1
  8. package/.nyc_output/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +0 -1
  9. package/.nyc_output/99acae99-becc-463d-ba35-9333f88d2694.json +0 -1
  10. package/.nyc_output/d071f9e0-3b11-44e6-9817-69f184dd064d.json +0 -1
  11. package/.nyc_output/ed000bec-7ff7-49bf-a109-d17bfe883433.json +0 -1
  12. package/.nyc_output/processinfo/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +0 -1
  13. package/.nyc_output/processinfo/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +0 -1
  14. package/.nyc_output/processinfo/99acae99-becc-463d-ba35-9333f88d2694.json +0 -1
  15. package/.nyc_output/processinfo/d071f9e0-3b11-44e6-9817-69f184dd064d.json +0 -1
  16. package/.nyc_output/processinfo/ed000bec-7ff7-49bf-a109-d17bfe883433.json +0 -1
  17. package/.nyc_output/processinfo/index.json +0 -1
  18. package/coverage/a3/defaults.js.html +0 -253
  19. package/coverage/a3/index.html +0 -131
  20. package/coverage/a3/index.js.html +0 -2338
  21. package/coverage/a3/lib/escape-host.js.html +0 -109
  22. package/coverage/a3/lib/index.html +0 -176
  23. package/coverage/a3/lib/mongodb-connect.js.html +0 -250
  24. package/coverage/a3/lib/moog-require.js.html +0 -790
  25. package/coverage/a3/lib/moog.js.html +0 -1711
  26. package/coverage/a3/lib/opentelemetry.js.html +0 -517
  27. package/coverage/a3/modules/@apostrophecms/admin-bar/index.html +0 -116
  28. package/coverage/a3/modules/@apostrophecms/admin-bar/index.js.html +0 -931
  29. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.html +0 -116
  30. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.js.html +0 -115
  31. package/coverage/a3/modules/@apostrophecms/any-page-type/index.html +0 -116
  32. package/coverage/a3/modules/@apostrophecms/any-page-type/index.js.html +0 -1105
  33. package/coverage/a3/modules/@apostrophecms/archive-page/index.html +0 -116
  34. package/coverage/a3/modules/@apostrophecms/archive-page/index.js.html +0 -97
  35. package/coverage/a3/modules/@apostrophecms/area/index.html +0 -116
  36. package/coverage/a3/modules/@apostrophecms/area/index.js.html +0 -2104
  37. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/area.js.html +0 -469
  38. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/index.html +0 -131
  39. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/widget.js.html +0 -286
  40. package/coverage/a3/modules/@apostrophecms/asset/index.html +0 -116
  41. package/coverage/a3/modules/@apostrophecms/asset/index.js.html +0 -3982
  42. package/coverage/a3/modules/@apostrophecms/asset/lib/globalIcons.js.html +0 -346
  43. package/coverage/a3/modules/@apostrophecms/asset/lib/index.html +0 -116
  44. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/index.html +0 -131
  45. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js.html +0 -289
  46. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js.html +0 -148
  47. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/index.html +0 -116
  48. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/index.html +0 -131
  49. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.es5.js.html +0 -184
  50. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js.html +0 -238
  51. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/utils.js.html +0 -958
  52. package/coverage/a3/modules/@apostrophecms/attachment/index.html +0 -116
  53. package/coverage/a3/modules/@apostrophecms/attachment/index.js.html +0 -3676
  54. package/coverage/a3/modules/@apostrophecms/attachment/lib/index.html +0 -116
  55. package/coverage/a3/modules/@apostrophecms/attachment/lib/legacy-migrations.js.html +0 -205
  56. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/index.html +0 -116
  57. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/rescale.js.html +0 -328
  58. package/coverage/a3/modules/@apostrophecms/busy/index.html +0 -116
  59. package/coverage/a3/modules/@apostrophecms/busy/index.js.html +0 -145
  60. package/coverage/a3/modules/@apostrophecms/cache/index.html +0 -116
  61. package/coverage/a3/modules/@apostrophecms/cache/index.js.html +0 -424
  62. package/coverage/a3/modules/@apostrophecms/db/index.html +0 -116
  63. package/coverage/a3/modules/@apostrophecms/db/index.js.html +0 -640
  64. package/coverage/a3/modules/@apostrophecms/doc/index.html +0 -116
  65. package/coverage/a3/modules/@apostrophecms/doc/index.js.html +0 -3937
  66. package/coverage/a3/modules/@apostrophecms/doc/lib/index.html +0 -116
  67. package/coverage/a3/modules/@apostrophecms/doc/lib/legacy-migrations.js.html +0 -622
  68. package/coverage/a3/modules/@apostrophecms/doc-type/index.html +0 -116
  69. package/coverage/a3/modules/@apostrophecms/doc-type/index.js.html +0 -8638
  70. package/coverage/a3/modules/@apostrophecms/doc-type/lib/autocomplete.js.html +0 -319
  71. package/coverage/a3/modules/@apostrophecms/doc-type/lib/index.html +0 -116
  72. package/coverage/a3/modules/@apostrophecms/email/index.html +0 -116
  73. package/coverage/a3/modules/@apostrophecms/email/index.js.html +0 -301
  74. package/coverage/a3/modules/@apostrophecms/error/index.html +0 -116
  75. package/coverage/a3/modules/@apostrophecms/error/index.js.html +0 -202
  76. package/coverage/a3/modules/@apostrophecms/express/index.html +0 -116
  77. package/coverage/a3/modules/@apostrophecms/express/index.js.html +0 -2116
  78. package/coverage/a3/modules/@apostrophecms/file/index.html +0 -116
  79. package/coverage/a3/modules/@apostrophecms/file/index.js.html +0 -367
  80. package/coverage/a3/modules/@apostrophecms/file-tag/index.html +0 -116
  81. package/coverage/a3/modules/@apostrophecms/file-tag/index.js.html +0 -127
  82. package/coverage/a3/modules/@apostrophecms/global/index.html +0 -116
  83. package/coverage/a3/modules/@apostrophecms/global/index.js.html +0 -535
  84. package/coverage/a3/modules/@apostrophecms/home-page/index.html +0 -116
  85. package/coverage/a3/modules/@apostrophecms/home-page/index.js.html +0 -94
  86. package/coverage/a3/modules/@apostrophecms/html-widget/index.html +0 -116
  87. package/coverage/a3/modules/@apostrophecms/html-widget/index.js.html +0 -271
  88. package/coverage/a3/modules/@apostrophecms/http/index.html +0 -116
  89. package/coverage/a3/modules/@apostrophecms/http/index.js.html +0 -976
  90. package/coverage/a3/modules/@apostrophecms/i18n/index.html +0 -116
  91. package/coverage/a3/modules/@apostrophecms/i18n/index.js.html +0 -2083
  92. package/coverage/a3/modules/@apostrophecms/image/index.html +0 -116
  93. package/coverage/a3/modules/@apostrophecms/image/index.js.html +0 -1486
  94. package/coverage/a3/modules/@apostrophecms/image-tag/index.html +0 -116
  95. package/coverage/a3/modules/@apostrophecms/image-tag/index.js.html +0 -127
  96. package/coverage/a3/modules/@apostrophecms/image-widget/index.html +0 -116
  97. package/coverage/a3/modules/@apostrophecms/image-widget/index.js.html +0 -145
  98. package/coverage/a3/modules/@apostrophecms/job/index.html +0 -116
  99. package/coverage/a3/modules/@apostrophecms/job/index.js.html +0 -1321
  100. package/coverage/a3/modules/@apostrophecms/launder/index.html +0 -116
  101. package/coverage/a3/modules/@apostrophecms/launder/index.js.html +0 -124
  102. package/coverage/a3/modules/@apostrophecms/lock/index.html +0 -116
  103. package/coverage/a3/modules/@apostrophecms/lock/index.js.html +0 -676
  104. package/coverage/a3/modules/@apostrophecms/login/index.html +0 -116
  105. package/coverage/a3/modules/@apostrophecms/login/index.js.html +0 -2617
  106. package/coverage/a3/modules/@apostrophecms/migration/index.html +0 -116
  107. package/coverage/a3/modules/@apostrophecms/migration/index.js.html +0 -970
  108. package/coverage/a3/modules/@apostrophecms/modal/index.html +0 -116
  109. package/coverage/a3/modules/@apostrophecms/modal/index.js.html +0 -193
  110. package/coverage/a3/modules/@apostrophecms/module/index.html +0 -116
  111. package/coverage/a3/modules/@apostrophecms/module/index.js.html +0 -2500
  112. package/coverage/a3/modules/@apostrophecms/module/lib/events.js.html +0 -547
  113. package/coverage/a3/modules/@apostrophecms/module/lib/index.html +0 -116
  114. package/coverage/a3/modules/@apostrophecms/notification/index.html +0 -116
  115. package/coverage/a3/modules/@apostrophecms/notification/index.js.html +0 -1315
  116. package/coverage/a3/modules/@apostrophecms/oembed/index.html +0 -116
  117. package/coverage/a3/modules/@apostrophecms/oembed/index.js.html +0 -781
  118. package/coverage/a3/modules/@apostrophecms/oembed/lib/index.html +0 -161
  119. package/coverage/a3/modules/@apostrophecms/oembed/lib/infogram.js.html +0 -178
  120. package/coverage/a3/modules/@apostrophecms/oembed/lib/vimeo.js.html +0 -124
  121. package/coverage/a3/modules/@apostrophecms/oembed/lib/wufoo.js.html +0 -256
  122. package/coverage/a3/modules/@apostrophecms/oembed/lib/youtube.js.html +0 -322
  123. package/coverage/a3/modules/@apostrophecms/oembed-field/index.html +0 -116
  124. package/coverage/a3/modules/@apostrophecms/oembed-field/index.js.html +0 -268
  125. package/coverage/a3/modules/@apostrophecms/page/index.html +0 -116
  126. package/coverage/a3/modules/@apostrophecms/page/index.js.html +0 -6955
  127. package/coverage/a3/modules/@apostrophecms/page/lib/index.html +0 -116
  128. package/coverage/a3/modules/@apostrophecms/page/lib/legacy-migrations.js.html +0 -568
  129. package/coverage/a3/modules/@apostrophecms/page-type/index.html +0 -116
  130. package/coverage/a3/modules/@apostrophecms/page-type/index.js.html +0 -1501
  131. package/coverage/a3/modules/@apostrophecms/pager/index.html +0 -116
  132. package/coverage/a3/modules/@apostrophecms/pager/index.js.html +0 -232
  133. package/coverage/a3/modules/@apostrophecms/permission/index.html +0 -116
  134. package/coverage/a3/modules/@apostrophecms/permission/index.js.html +0 -1057
  135. package/coverage/a3/modules/@apostrophecms/permission/lib/index.html +0 -116
  136. package/coverage/a3/modules/@apostrophecms/permission/lib/legacy-migrations.js.html +0 -160
  137. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.html +0 -116
  138. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.js.html +0 -1051
  139. package/coverage/a3/modules/@apostrophecms/piece-type/index.html +0 -116
  140. package/coverage/a3/modules/@apostrophecms/piece-type/index.js.html +0 -3103
  141. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.html +0 -116
  142. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.js.html +0 -157
  143. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.html +0 -116
  144. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.js.html +0 -1363
  145. package/coverage/a3/modules/@apostrophecms/schema/index.html +0 -116
  146. package/coverage/a3/modules/@apostrophecms/schema/index.js.html +0 -4603
  147. package/coverage/a3/modules/@apostrophecms/schema/lib/addFieldTypes.js.html +0 -3502
  148. package/coverage/a3/modules/@apostrophecms/schema/lib/index.html +0 -131
  149. package/coverage/a3/modules/@apostrophecms/schema/lib/joinr.js.html +0 -703
  150. package/coverage/a3/modules/@apostrophecms/search/index.html +0 -116
  151. package/coverage/a3/modules/@apostrophecms/search/index.js.html +0 -1222
  152. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.html +0 -116
  153. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.js.html +0 -343
  154. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.html +0 -116
  155. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.js.html +0 -595
  156. package/coverage/a3/modules/@apostrophecms/task/index.html +0 -116
  157. package/coverage/a3/modules/@apostrophecms/task/index.js.html +0 -1147
  158. package/coverage/a3/modules/@apostrophecms/template/index.html +0 -116
  159. package/coverage/a3/modules/@apostrophecms/template/index.js.html +0 -2731
  160. package/coverage/a3/modules/@apostrophecms/template/lib/bundlesLoader.js.html +0 -559
  161. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/component.js.html +0 -310
  162. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/fragment.js.html +0 -325
  163. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/index.html +0 -146
  164. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/render.js.html +0 -490
  165. package/coverage/a3/modules/@apostrophecms/template/lib/index.html +0 -131
  166. package/coverage/a3/modules/@apostrophecms/template/lib/nunjucksLoader.js.html +0 -658
  167. package/coverage/a3/modules/@apostrophecms/ui/index.html +0 -116
  168. package/coverage/a3/modules/@apostrophecms/ui/index.js.html +0 -181
  169. package/coverage/a3/modules/@apostrophecms/uploadfs/index.html +0 -116
  170. package/coverage/a3/modules/@apostrophecms/uploadfs/index.js.html +0 -286
  171. package/coverage/a3/modules/@apostrophecms/url/index.html +0 -116
  172. package/coverage/a3/modules/@apostrophecms/url/index.js.html +0 -733
  173. package/coverage/a3/modules/@apostrophecms/user/index.html +0 -116
  174. package/coverage/a3/modules/@apostrophecms/user/index.js.html +0 -1684
  175. package/coverage/a3/modules/@apostrophecms/user/lib/index.html +0 -116
  176. package/coverage/a3/modules/@apostrophecms/user/lib/legacy-migrations.js.html +0 -157
  177. package/coverage/a3/modules/@apostrophecms/util/index.html +0 -116
  178. package/coverage/a3/modules/@apostrophecms/util/index.js.html +0 -3424
  179. package/coverage/a3/modules/@apostrophecms/util/lib/index.html +0 -116
  180. package/coverage/a3/modules/@apostrophecms/util/lib/logger.js.html +0 -319
  181. package/coverage/a3/modules/@apostrophecms/video-widget/index.html +0 -116
  182. package/coverage/a3/modules/@apostrophecms/video-widget/index.js.html +0 -178
  183. package/coverage/a3/modules/@apostrophecms/widget-type/index.html +0 -116
  184. package/coverage/a3/modules/@apostrophecms/widget-type/index.js.html +0 -1225
  185. package/coverage/a3/test-lib/index.html +0 -131
  186. package/coverage/a3/test-lib/test.js.html +0 -232
  187. package/coverage/a3/test-lib/util.js.html +0 -373
  188. package/coverage/base.css +0 -224
  189. package/coverage/block-navigation.js +0 -87
  190. package/coverage/favicon.png +0 -0
  191. package/coverage/index.html +0 -1256
  192. package/coverage/prettify.css +0 -1
  193. package/coverage/prettify.js +0 -2
  194. package/coverage/sort-arrow-sprite.png +0 -0
  195. package/coverage/sorter.js +0 -196
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.221.2 (2022-07-06)
4
+
5
+ ## Fixes
6
+
7
+ * Previously, cache objects returned by `apos.caches.get` shared an incorrectly configured unique key index that prevented the same key from existing in two caches. This did not lead to any data integrity problems, because it was too strict rather than not strict enough. In this release the offending index is replaced with a correct one, which must be unique only on a combination of `name` (the cache name) and `key`, and unit test coverage is added to prevent a recurrence.
8
+
9
+ ## 2.221.1 (2022-06-22)
10
+
11
+ ## Fixes
12
+
13
+ * Take into account query string in redirections.
14
+
3
15
  ## 2.221.0 (2022-06-07)
4
16
 
5
17
  ## Adds
@@ -16,6 +16,7 @@ module.exports = {
16
16
 
17
17
  afterConstruct: function(self, callback) {
18
18
  self.addClearCacheTask();
19
+ self.removeBadIndexMigration();
19
20
  return self.getCollection(function(err) {
20
21
  if (err) {
21
22
  return callback(err);
@@ -213,7 +214,7 @@ module.exports = {
213
214
  self.ensureIndexes = function(callback) {
214
215
  return async.series({
215
216
  keyIndex: function(callback) {
216
- return self.cacheCollection.ensureIndex({ key: 1, cache: 1 }, { unique: true }, callback);
217
+ return self.cacheCollection.ensureIndex({ key: 1, name: 1 }, { unique: true }, callback);
217
218
  },
218
219
  expireIndex: function(callback) {
219
220
  return self.cacheCollection.ensureIndex({ expires: 1 }, { expireAfterSeconds: 0 }, callback);
@@ -242,5 +243,26 @@ module.exports = {
242
243
  }
243
244
  );
244
245
  };
246
+
247
+ self.removeBadIndexMigration = function() {
248
+ // Cache module wakes before migrations module so we have to wait
249
+ // for apostrophe:modulesReady before registering the migration. Most modules
250
+ // can register one directly from afterConstruct
251
+ self.on('apostrophe:modulesReady', 'addRemoveBadIndexMigration', function() {
252
+ self.apos.migrations.add(self.__meta.name + '.removeBadIndex', async function() {
253
+ const indexes = await self.cacheCollection.indexes();
254
+ const culprit = indexes.find(index => index.key &&
255
+ (Object.keys(index.key).length === 2) &&
256
+ index.key.key &&
257
+ index.key.cache &&
258
+ index.unique
259
+ );
260
+ if (culprit) {
261
+ self.apos.utils.log('Removing incorrect cache index');
262
+ return self.cacheCollection.dropIndex(culprit.name);
263
+ }
264
+ });
265
+ });
266
+ };
245
267
  }
246
268
  };
@@ -1,5 +1,6 @@
1
1
  var _ = require('@sailshq/lodash');
2
2
  var async = require('async');
3
+ var qs = require('qs');
3
4
 
4
5
  // Implements "soft redirects." When a 404 is about to occur, Apostrophe will look
5
6
  // for a page or piece that has been associated with that URL in the past, and
@@ -48,21 +49,27 @@ module.exports = {
48
49
  };
49
50
 
50
51
  self.pageNotFound = function(req, callback) {
51
- return self.apos.docs.find(req, { historicUrls: { $in: [ req.url ] } }).sort({ updatedAt: -1 }).toObject(function(err, doc) {
52
- if (err) {
53
- return callback(err);
54
- }
55
- if (!doc) {
56
- return callback(null);
57
- }
58
- if (!doc._url) {
52
+ return self.apos.docs
53
+ .find(req, { historicUrls: req.path })
54
+ .sort({ updatedAt: -1 })
55
+ .toObject(function(err, doc) {
56
+ if (err) {
57
+ return callback(err);
58
+ }
59
+ if (!doc) {
60
+ return callback(null);
61
+ }
62
+ if (!doc._url) {
63
+ return callback(null);
64
+ }
65
+ if (self.local(doc._url) !== req.path) {
66
+ return req.res.redirect(
67
+ statusCode,
68
+ `${self.local(doc._url)}${qs.stringify(req.query, { addQueryPrefix: true })}`
69
+ );
70
+ }
59
71
  return callback(null);
60
- }
61
- if (self.local(doc._url) !== req.url) {
62
- return req.res.redirect(statusCode, self.local(doc._url));
63
- }
64
- return callback(null);
65
- });
72
+ });
66
73
  };
67
74
 
68
75
  self.pageBeforeSend = function(req, callback) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apostrophe",
3
- "version": "2.221.0",
3
+ "version": "2.221.2",
4
4
  "description": "The Apostrophe Content Management System.",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/test/caches.js CHANGED
@@ -11,6 +11,8 @@ describe('Caches', function() {
11
11
 
12
12
  var apos;
13
13
  var cache;
14
+ let cache2;
15
+
14
16
  it('should exist on the apos object', function(done) {
15
17
  apos = require('../index.js')({
16
18
  root: module,
@@ -117,4 +119,31 @@ describe('Caches', function() {
117
119
  return true;
118
120
  });
119
121
  });
122
+ it('should give us a second, independent cache object', function() {
123
+ cache2 = apos.caches.get('testMonkeys2');
124
+ });
125
+ it('cache 1 should allow us to store capuchin', function() {
126
+ return cache.set('capuchin', { message: 'eek eek' });
127
+ });
128
+ it('cache 2 should allow us to store capuchin with another message', function() {
129
+ return cache2.set('capuchin', { message: 'ook ook' });
130
+ });
131
+ it('cache 1 should contain its unique message', async function() {
132
+ assert.strictEqual((await cache.get('capuchin')).message, 'eek eek');
133
+ });
134
+ it('cache 2 should contain its unique message', async function() {
135
+ assert.strictEqual((await cache2.get('capuchin')).message, 'ook ook');
136
+ });
137
+ it('unique index still prevents double insert of key within a namespace', async function() {
138
+ try {
139
+ await apos.caches.cacheCollection.insert({
140
+ key: 'capuchin',
141
+ name: 'testMonkeys'
142
+ });
143
+ // That's bad, unique index should have stopped us
144
+ assert(false);
145
+ } catch (e) {
146
+ // This is what we wanted to happen
147
+ }
148
+ });
120
149
  });
@@ -81,7 +81,21 @@ describe('Soft Redirects', function() {
81
81
  // Is our status code good?
82
82
  assert.equal(response.statusCode, 302);
83
83
  // Are we going to be redirected to our page?
84
- assert.equal(response.headers['location'], '/child-moved');
84
+ assert.equal(response.headers.location, '/child-moved');
85
+ return done();
86
+ });
87
+ });
88
+
89
+ it('should be able to serve the page at its old URL too, via redirect, with query params', function(done) {
90
+ return request({
91
+ url: 'http://localhost:7900/child?a-query-param=foo&bar[]=a&bar[]=b&another',
92
+ followRedirect: false
93
+ }, function(err, response, body) {
94
+ assert(!err);
95
+ // Is our status code good?
96
+ assert.equal(response.statusCode, 302);
97
+ // Are we going to be redirected to our page?
98
+ assert.equal(response.headers.location, '/child-moved?a-query-param=foo&bar%5B0%5D=a&bar%5B1%5D=b&another=');
85
99
  return done();
86
100
  });
87
101
  });
@@ -158,9 +172,8 @@ describe('Soft Redirects - with `statusCode` option', function() {
158
172
  // Is our status code good?
159
173
  assert.equal(response.statusCode, 301);
160
174
  // Are we going to be redirected to our page?
161
- assert.equal(response.headers['location'], '/child-moved');
175
+ assert.equal(response.headers.location, '/child-moved');
162
176
  return done();
163
177
  });
164
178
  });
165
-
166
179
  });