• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Courseography / courseography / d64d18ba-ec0c-490a-ad8b-28e03fcc853b

13 Nov 2025 03:55PM UTC coverage: 55.03% (-0.1%) from 55.155%
d64d18ba-ec0c-490a-ad8b-28e03fcc853b

Pull #1607

circleci

web-flow
Merge branch 'master' into rename-post-table-to-program
Pull Request #1607: Rename post table to program

490 of 960 branches covered (51.04%)

Branch coverage included in aggregate %.

21 of 52 new or added lines in 6 files covered. (40.38%)

28 existing lines in 2 files now uncovered.

2223 of 3970 relevant lines covered (55.99%)

158.9 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

48.65
/app/Controllers/Generate.hs
1
module Controllers.Generate
2
    (generateResponse, findAndSavePrereqsResponse) where
3

4
import Control.Monad ()
5
import Control.Monad.IO.Class (liftIO)
6
import Data.Aeson (decode, object, (.=))
7
import Data.List (nub)
8
import Data.Maybe (fromJust, isNothing, mapMaybe)
9
import qualified Data.Text.Lazy as TL
10
import DynamicGraphs.GraphOptions (CourseGraphOptions (..), GraphOptions (..))
11
import DynamicGraphs.WriteRunDot (generateAndSavePrereqResponse, getBody)
12
import Happstack.Server
13
import MasterTemplate
14
import Models.Program (reqsForProgram, returnProgram)
15
import Scripts
16
import Text.Blaze ((!))
17
import qualified Text.Blaze.Html5 as H
18
import qualified Text.Blaze.Html5.Attributes as A
19
import Util.Happstack (createJSONResponse)
20

21
generateResponse :: ServerPart Response
22
generateResponse =
23
    ok $ toResponse $
×
24
        masterTemplate "Courseography - Generate"
×
25
                    []
×
26
                    (do
×
27
                        H.div ! A.id "navbar" $ ""
×
28
                        generatePrerequisites
×
29
                    )
30
                    generateScripts
×
31

32
generatePrerequisites :: H.Html
33
generatePrerequisites =
34
    H.html $ do
×
35
        H.head $
×
36
            H.title "Generate Prerequisites!"
×
37
        H.div ! A.id "generateRoot" $ ""
×
38

39
findAndSavePrereqsResponse :: ServerPart Response
40
findAndSavePrereqsResponse = do
1✔
41
    method PUT
1✔
42
    requestBody <- getBody
1✔
43
    let coursesOptions :: CourseGraphOptions = fromJust $ decode requestBody
2✔
44

45
    programResults <- liftIO $ mapM (\code -> do
2✔
NEW
46
                        program <- returnProgram (TL.toStrict code)
×
NEW
47
                        return (TL.toStrict code, program))
×
48
                   (programs coursesOptions)
2✔
49

NEW
50
    let invalidPrograms = map fst $ filter (isNothing . snd) programResults
×
NEW
51
        validPrograms = mapMaybe snd programResults
×
52

53
    allCourses <- liftIO $ nub <$>
2✔
54
        if all (== TL.empty) (courses coursesOptions)
2!
55
            then return $ map TL.pack (concatMap reqsForProgram validPrograms)
×
56
            else return $ courses coursesOptions
2✔
57

58
    let updatedCoursesOptions = coursesOptions
2✔
59
            { courses = map TL.toUpper allCourses
2✔
60
            , graphOptions = (graphOptions coursesOptions)
2✔
61
                { taken = map TL.toUpper (taken (graphOptions coursesOptions))
2✔
62
                , departments = map TL.toUpper (departments (graphOptions coursesOptions))
2✔
63
                }
64
            }
65

66
    if all (== TL.empty) (courses coursesOptions) && not (null invalidPrograms)
2!
67
        then return $ createJSONResponse $ object ["error" .= object ["invalidPrograms" .= invalidPrograms]]
×
68
        else liftIO $ generateAndSavePrereqResponse updatedCoursesOptions
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc