Skip to content

Commit

Permalink
Merge branch 'fix-exported-file-extension'
Browse files Browse the repository at this point in the history
  • Loading branch information
koterpillar committed Dec 26, 2018
2 parents cc0937e + 735c69d commit 9f02ec9
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 16 deletions.
9 changes: 5 additions & 4 deletions src/Views/Export.hs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ pdfExport ::
-> Meta
-> m (Export LB.ByteString)
pdfExport lang meta =
fmap (inline pdf (metaExportFileName Docx meta)) $
fmap (inline pdf (metaExportFileName Pdf meta)) $
withCacheM (bestLanguage lang, mtSlug meta) $ do
let content = runPandocPure' $ writeHtml $ langContent lang meta
let title = langTitle lang meta
Expand All @@ -91,10 +91,10 @@ pdfExport lang meta =
wkhtmltopdf :: MonadIO m => LB.ByteString -> m LB.ByteString
wkhtmltopdf html =
liftIO $ do
(exitCode, pdf, err) <- readCreateProcessWithExitCode wkhtmlProc html
let pdf' = filterWkhtmlWarnings pdf
(exitCode, output, err) <- readCreateProcessWithExitCode wkhtmlProc html
let output' = filterWkhtmlWarnings output
case exitCode of
ExitSuccess -> return pdf'
ExitSuccess -> return output'
ExitFailure _ -> error $ TL.unpack $ decodeUtf8 err

-- wkhtmltopdf, wrapped in xvfb-run as it requires an X display
Expand Down Expand Up @@ -125,6 +125,7 @@ filterWkhtmlWarnings output
where
startsWithError =
LB.isPrefixOf "QSslSocket" output ||
LB.isPrefixOf "QNet" output ||
LB.isPrefixOf "libpng warning" output ||
LB.isPrefixOf "Warning: Ignoring XDG_SESSION_TYPE=wayland" output
dropThisLine :: LB.ByteString -> LB.ByteString
Expand Down
18 changes: 13 additions & 5 deletions testsuite/Integration/Base.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
module Integration.Base
( TestRequest
, makeRequest
, makeRequestBS
, makeRequestText
, simpleRequest
, assertContains
Expand All @@ -14,6 +15,8 @@ module Integration.Base
, assertTextContains
, assertTextContainsBefore
, assertTextNotContains
, responseContent
, responseHeader
, testAddress
, withLang
, withLang1
Expand All @@ -22,11 +25,11 @@ module Integration.Base

import Control.Concurrent.MVar

import Data.ByteString (ByteString)
import qualified Data.ByteString.Lazy as LB
import Data.Char
import Data.List
import qualified Data.Map as M
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
Expand All @@ -52,16 +55,18 @@ testAddress :: T.Text
testAddress = "http://test"

-- | Make a request to the application
makeRequest :: TestRequest -> IO LB.ByteString
makeRequest :: TestRequest -> IO Response
makeRequest req = do
happstackReq <- mkRequest req
app <- loadApp "testsuite/Integration/content" testAddress False
cache <- initAppCache
rsp <- runApp cache app $ simpleHTTP'' site happstackReq
responseContent rsp
runApp cache app $ simpleHTTP'' site happstackReq

makeRequestBS :: TestRequest -> IO LB.ByteString
makeRequestBS req = makeRequest req >>= responseContent

makeRequestText :: TestRequest -> IO Text
makeRequestText = fmap (T.decodeUtf8 . LB.toStrict) . makeRequest
makeRequestText = fmap (T.decodeUtf8 . LB.toStrict) . makeRequestBS

assertContains :: (Eq a, Show a) => [a] -> [a] -> Assertion
assertContains needle haystack =
Expand Down Expand Up @@ -189,3 +194,6 @@ responseContent f@SendFile {} = do
let offset = fromIntegral $ sfOffset f
let count = fromIntegral $ sfCount f
pure $ LB.drop offset $ LB.take count contents

responseHeader :: String -> Response -> Maybe ByteString
responseHeader = getHeader
3 changes: 1 addition & 2 deletions testsuite/Integration/TestFeed.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
module Integration.TestFeed where

import Data.Default.Class
import Data.Monoid

import Data.XML.Types

Expand All @@ -23,7 +22,7 @@ atomEntry = "{http://www.w3.org/2005/Atom}entry"

test_home :: IO ()
test_home = do
rss <- makeRequest $ simpleRequest "/feed/en"
rss <- makeRequestBS $ simpleRequest "/feed/en"
xml <-
case C.parseLBS def rss of
Left exc -> error $ show exc
Expand Down
24 changes: 21 additions & 3 deletions testsuite/Integration/TestMeta.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
module Integration.TestMeta where

import qualified Data.ByteString.Lazy as LB
import Data.Foldable
import Data.LanguageCodes
import Data.Text.Encoding (decodeUtf8)

import Integration.Base

Expand All @@ -23,16 +25,32 @@ test_meta_html = do
test_meta_pdf :: IO ()
test_meta_pdf = do
meta_pdf <- makeRequest $ simpleRequest "/meta.pdf"
assertEqual "%PDF" (LB.take 4 meta_pdf)
meta_pdf_content <- responseContent meta_pdf
assertEqual "%PDF" (LB.take 4 meta_pdf_content)
assertEqual
(Just "inline; filename=\"meta.pdf\"")
(responseHeader "Content-Disposition" meta_pdf)

test_meta_export_custom_slug :: IO ()
test_meta_export_custom_slug = for_ ["pdf", "docx"] $ \format -> do
meta_pdf <- makeRequest $ simpleRequest $ "/custom-slug." <> format
assertEqual
(Just $ "inline; filename=\"customized-slug." <> format <> "\"")
(decodeUtf8 <$> responseHeader "Content-Disposition" meta_pdf)

test_meta_pdf_ru :: IO ()
test_meta_pdf_ru = do
meta_pdf <- makeRequest $ withLang1 RU $ simpleRequest "/meta.pdf"
assertEqual "%PDF" (LB.take 4 meta_pdf)
meta_pdf_content <- responseContent meta_pdf
assertEqual "%PDF" (LB.take 4 meta_pdf_content)

test_meta_docx :: IO ()
test_meta_docx = do
meta_docx <- makeRequest $ simpleRequest "/meta.docx"
meta_docx_content <- responseContent meta_docx
assertEqual
"PK" -- DOCX are ZIP files
(LB.take 2 meta_docx)
(LB.take 2 meta_docx_content)
assertEqual
(Just "inline; filename=\"meta.docx\"")
(responseHeader "Content-Disposition" meta_docx)
4 changes: 2 additions & 2 deletions testsuite/Integration/TestStatic.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import Integration.Base
import Test.Framework

test_static = do
resp <- makeRequest $ simpleRequest "/some-verification-file.html"
resp <- makeRequestBS $ simpleRequest "/some-verification-file.html"
assertEqual "This is the exact content of the verification file.\n" resp

test_static_index = do
resp <- makeRequest $ simpleRequest "/with_index/"
resp <- makeRequestBS $ simpleRequest "/with_index/"
assertEqual "Index file\n" resp
1 change: 1 addition & 0 deletions testsuite/Integration/content/meta/custom-slug/en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Custom slug meta!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
exportSlug: customized-slug

0 comments on commit 9f02ec9

Please sign in to comment.