blob: 00840c731abda39b11ba89a34c08ff9a1eb02474 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
module ParserSpec (spec) where
import Data.Maybe (catMaybes)
import qualified Data.Text.IO as T
import qualified Network.Wreq.Session as Session
import Test.Hspec
import qualified Ads
import qualified FetchAd
import Model.Ad (Ad (..))
import qualified Parser.LeboncoinParser as LeboncoinParser
import qualified Parser.OuestFranceParser as OuestFranceParser
import qualified Parser.SeLogerParser as SeLogerParser
spec :: Spec
spec = do
describe "Parser" $ do
session <- runIO Session.newSession
describe "LeBonCoin" $ do
it "should parse no results from empty string" $ do
LeboncoinParser.parse "" `shouldBe` []
it "should parse ads from local page" $ do
ads <- T.readFile "src/test/resources/leboncoin.html"
LeboncoinParser.parse ads `shouldBe` Ads.leboncoin
it "should parse ads from remote page" $ do
ads <- FetchAd.leboncoin
session
["https://www.leboncoin.fr/annonces/offres/ile_de_france/"]
checkAds ads
describe "OuestFrance" $ do
it "should parse no results from empty string" $ do
OuestFranceParser.parse "" `shouldBe` []
it "should parse ads from page" $ do
rawOuestFranceAds <- T.readFile "src/test/resources/ouestFrance.html"
OuestFranceParser.parse rawOuestFranceAds `shouldBe` Ads.ouestFrance
it "should parse ads from remote page" $ do
ads <- FetchAd.ouestFrance
session
["https://www.ouestfrance-immo.com/louer/appartement/rennes-35-35000/"]
checkAds ads
describe "SeLoger" $ do
it "should parse no results from empty string" $ do
SeLogerParser.parse "" `shouldBe` []
it "should parse ads from page" $ do
ads <- T.readFile "src/test/resources/seLoger.html"
SeLogerParser.parse ads `shouldBe` Ads.seLoger
it "should parse ads from remote page" $ do
ads <- FetchAd.seLoger
session
["https://www.seloger.com/list.htm?tri=initial&idtypebien=2,1&idtt=2,5&naturebien=1,2,4&ci=690123"]
checkAds ads
checkAds :: [Ad] -> IO ()
checkAds ads = do
length ads `shouldSatisfy` (\n -> n > 10)
(length . catMaybes . map price $ ads) `shouldSatisfy` (\n -> n > 10)
|