diff --git a/test/fixtures/site 1/redirects.json b/test/fixtures/site 1/redirects.json index d969f63..5d295f8 100644 --- a/test/fixtures/site 1/redirects.json +++ b/test/fixtures/site 1/redirects.json @@ -17,4 +17,12 @@ "from": "/redirect5", "to": "/", "permanent": true +}, { + "from": "/overridden_route", + "to": "/overridden_redirect" +}, { + "from": "/overridden_route_2", + "to": "/overridden_redirect_2", + "start": "2000-1-1 00:00:00", + "end": "3000-1-1 00:00:00" }] \ No newline at end of file diff --git a/test/fixtures/site 1/views/overridden_route.hbs b/test/fixtures/site 1/views/overridden_route.hbs new file mode 100644 index 0000000..e885c48 --- /dev/null +++ b/test/fixtures/site 1/views/overridden_route.hbs @@ -0,0 +1 @@ +This route should be overridden \ No newline at end of file diff --git a/test/fixtures/site 1/views/overridden_route_2.hbs b/test/fixtures/site 1/views/overridden_route_2.hbs new file mode 100644 index 0000000..e885c48 --- /dev/null +++ b/test/fixtures/site 1/views/overridden_route_2.hbs @@ -0,0 +1 @@ +This route should be overridden \ No newline at end of file diff --git a/test/solidus.js b/test/solidus.js index 88c1843..860ca98 100644 --- a/test/solidus.js +++ b/test/solidus.js @@ -24,8 +24,48 @@ describe( 'Solidus', function(){ describe( 'production', function(){ var solidus_server; + var original_redirects = []; before( function( done ){ + process.chdir( site1_path ); + // Generate time-based redirects + // These are used to ensure that temporary redirects are properly checked + original_redirects = fs.readFileSync( 'redirects.json', DEFAULT_ENCODING ); + var original_redirects_arr = JSON.parse( original_redirects ); + var redirect_date_format = 'YYYY-MM-DD HH:mm:ss'; + var temporal_redirects = [{ + start: moment().add( 's', 5 ).format( redirect_date_format ), + from: '/future_redirect', + to: '/' + }, { + start: moment().subtract( 's', 5 ).format( redirect_date_format ), + end: moment().add( 's', 5 ).format( redirect_date_format ), + from: '/current_redirect', + to: '/' + }, { + start: moment().subtract( 's', 10 ).format( redirect_date_format ), + end: moment().subtract( 's', 5 ).format( redirect_date_format ), + from: '/past_redirect', + to: '/' + }]; + var overlapping_redirects = [{ + start: moment().add( 's', 5 ).format( redirect_date_format ), + from: '/overlapping_redirect', + to: '/overlapping_redirect_future' + }, { + start: moment().subtract( 's', 5 ).format( redirect_date_format ), + end: moment().add( 's', 5 ).format( redirect_date_format ), + from: '/overlapping_redirect', + to: '/overlapping_redirect_current' + }, { + start: moment().subtract( 's', 10 ).format( redirect_date_format ), + end: moment().subtract( 's', 5 ).format( redirect_date_format ), + from: '/overlapping_redirect', + to: '/overlapping_redirect_past' + }]; + var combined_redirects = JSON.stringify( original_redirects_arr.concat( temporal_redirects, overlapping_redirects ) ); + fs.writeFileSync( 'redirects.json', combined_redirects, DEFAULT_ENCODING ); + // mock http endpoints for resources nock('https://solid.us').get('/basic/1').reply( 200, { test: true } ); nock('https://solid.us').get('/basic/2').reply( 200, { test: true } ); @@ -63,47 +103,7 @@ describe( 'Solidus', function(){ }); }); - var original_redirects = []; - beforeEach( function( done ){ - process.chdir( site1_path ); - // Generate time-based redirects - // These are used to ensure that temporary redirects are properly checked - original_redirects = fs.readFileSync( 'redirects.json', DEFAULT_ENCODING ); - var original_redirects_arr = JSON.parse( original_redirects ); - var redirect_date_format = 'YYYY-MM-DD HH:mm:ss'; - var temporal_redirects = [{ - start: moment().add( 's', 5 ).format( redirect_date_format ), - from: '/future-redirect', - to: '/' - }, { - start: moment().subtract( 's', 5 ).format( redirect_date_format ), - end: moment().add( 's', 5 ).format( redirect_date_format ), - from: '/current-redirect', - to: '/' - }, { - start: moment().subtract( 's', 10 ).format( redirect_date_format ), - end: moment().subtract( 's', 5 ).format( redirect_date_format ), - from: '/past-redirect', - to: '/' - }]; - var overlapping_redirects = [{ - start: moment().add( 's', 5 ).format( redirect_date_format ), - from: '/overlapping-redirect', - to: '/overlapping-redirect-future' - }, { - start: moment().subtract( 's', 5 ).format( redirect_date_format ), - end: moment().add( 's', 5 ).format( redirect_date_format ), - from: '/overlapping-redirect', - to: '/overlapping-redirect-current' - }, { - start: moment().subtract( 's', 10 ).format( redirect_date_format ), - end: moment().subtract( 's', 5 ).format( redirect_date_format ), - from: '/overlapping-redirect', - to: '/overlapping-redirect-past' - }]; - var combined_redirects = JSON.stringify( original_redirects_arr.concat( temporal_redirects, overlapping_redirects ) ); - fs.writeFileSync( 'redirects.json', combined_redirects, DEFAULT_ENCODING ); solidus_server = solidus.start({ log_level: 0, port: 9009 @@ -113,6 +113,9 @@ describe( 'Solidus', function(){ afterEach( function(){ solidus_server.stop(); + }); + + after( function(){ fs.writeFileSync( 'redirects.json', original_redirects, DEFAULT_ENCODING ); process.chdir( original_path ); }); @@ -331,16 +334,16 @@ describe( 'Solidus', function(){ s_request.get('/redirect5').expect( 301, callback ); }, function( callback ){ - s_request.get('/past-redirect').expect( 404, callback ); + s_request.get('/past_redirect').expect( 404, callback ); }, function( callback ){ - s_request.get('/current-redirect').expect( 302, callback ); + s_request.get('/current_redirect').expect( 302, callback ); }, function( callback ){ - s_request.get('/future-redirect').expect( 404, callback ); + s_request.get('/future_redirect').expect( 404, callback ); }, function( callback ){ - s_request.get('/overlapping-redirect').expect( 'location', '/overlapping-redirect-current', callback ); + s_request.get('/overlapping_redirect').expect( 'location', '/overlapping_redirect_current', callback ); } ], function( err, results ){ if( err ) throw err; @@ -348,6 +351,26 @@ describe( 'Solidus', function(){ }); }); + it( 'Overrides page routes with redirect routes', function( done ){ + s_request = request( solidus_server.router ); + async.parallel([ + function( cb ){ + s_request.get('/overridden_route') + .expect( 302 ) + .expect( 'location', '/overridden_redirect', cb ); + }, + function( cb ){ + s_request.get('/overridden_route_2') + .expect( 302 ) + .expect( 'location', '/overridden_redirect_2', cb ); + } + ], + function( err, results ){ + if( err ) throw err; + done(); + }); + }); + it( 'Sets the default layout', function(){ assert( solidus_server.handlebars.defaultLayout === 'layout' ); });