From ebf754904f136d5aed6ea517574ab0c9816584fe Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Thu, 20 Aug 2015 15:56:56 +0100 Subject: [PATCH] More thorough tests for the FileStoreController when downloading .html files. --- .../FileStore/FileStoreControllerTests.coffee | 87 ++++++++++++------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/services/web/test/UnitTests/coffee/FileStore/FileStoreControllerTests.coffee b/services/web/test/UnitTests/coffee/FileStore/FileStoreControllerTests.coffee index 6dbcd92722..1d24d11957 100644 --- a/services/web/test/UnitTests/coffee/FileStore/FileStoreControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/FileStore/FileStoreControllerTests.coffee @@ -66,44 +66,65 @@ describe "FileStoreController", -> done() @controller.getFile @req, @res - describe "with an HTML file", -> - - beforeEach -> - @user_agent = 'A generic browser' - @file.name = 'really_bad.html' - @req.get = (key) => - if key == 'User-Agent' - @user_agent - - describe "from firefox", -> + # Test behaviour around handling html files + ['.html', '.htm', '.xhtml'].forEach (extension) -> + describe "with a '#{extension}' file extension", -> beforeEach -> - @user_agent = "A Firefox browser" + @user_agent = 'A generic browser' + @file.name = "bad#{extension}" + @req.get = (key) => + if key == 'User-Agent' + @user_agent - it "should not set Content-Type", (done) -> - @stream.pipe = (des) => - @res.setHeader.calledWith("Content-Type", "text/plain").should.equal false - done() - @controller.getFile @req, @res + describe "from a non-ios browser", -> - describe "from an iPhone", -> + it "should not set Content-Type", (done) -> + @stream.pipe = (des) => + @res.setHeader.calledWith("Content-Type", "text/plain").should.equal false + done() + @controller.getFile @req, @res + + describe "from an iPhone", -> + + beforeEach -> + @user_agent = "An iPhone browser" + + it "should set Content-Type to 'text/plain'", (done) -> + @stream.pipe = (des) => + @res.setHeader.calledWith("Content-Type", "text/plain").should.equal true + done() + @controller.getFile @req, @res + + describe "from an iPad", -> + + beforeEach -> + @user_agent = "An iPad browser" + + it "should set Content-Type to 'text/plain'", (done) -> + @stream.pipe = (des) => + @res.setHeader.calledWith("Content-Type", "text/plain").should.equal true + done() + @controller.getFile @req, @res + + # None of these should trigger the iOS/html logic + ['x.html-is-rad', 'html.pdf', 'bare'].forEach (filename) -> + describe "with filename as '#{filename}'", -> beforeEach -> - @user_agent = "An iPhone browser" + @user_agent = 'A generic browser' + @file.name = filename + @req.get = (key) => + if key == 'User-Agent' + @user_agent - it "should set Content-Type to 'text/plain'", (done) -> - @stream.pipe = (des) => - @res.setHeader.calledWith("Content-Type", "text/plain").should.equal true - done() - @controller.getFile @req, @res + ['iPhone', 'iPad', 'Firefox', 'Chrome'].forEach (browser) -> + describe "downloaded from #{browser}", -> + beforeEach -> + @user_agent = "Some #{browser} thing" - describe "from an iPad", -> - - beforeEach -> - @user_agent = "An iPad browser" - - it "should set Content-Type to 'text/plain'", (done) -> - @stream.pipe = (des) => - @res.setHeader.calledWith("Content-Type", "text/plain").should.equal true - done() - @controller.getFile @req, @res + it 'Should not set the Content-type', (done) -> + @stream.pipe = (des) => + @res.setHeader.calledWith("Content-Type", "text/plain").should.equal false + done() + @controller.getFile @req, @res