TL;DR: - Write FromJSON instances to decode rules.json file - Prefer Text to String and use the OverloadedStrings language extension - Read /etc/hosts and append the serialized rules.json to the end Notes: - I can remove some of the FromJSON instances and use GHC Generics to define them for me. TODO: - Define the systemd timer unit for this to run - Ensure script can run with root privileges
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
| module Spec (main) where
 | |
| 
 | |
| --------------------------------------------------------------------------------
 | |
| -- Dependencies
 | |
| --------------------------------------------------------------------------------
 | |
| 
 | |
| import qualified Main as Main
 | |
| 
 | |
| import Test.Hspec
 | |
| 
 | |
| --------------------------------------------------------------------------------
 | |
| -- Tests
 | |
| --------------------------------------------------------------------------------
 | |
| 
 | |
| main :: IO ()
 | |
| main = hspec $ do
 | |
|   describe "getRules" $ do
 | |
|     it "returns the parsed rules from rules.json" $ do
 | |
|       rules <- Main.getRules
 | |
|       rules `shouldBe` [ Main.Rule { Main.urls = [ Main.URL "facebook.com"
 | |
|                                                  , Main.URL "www.facebook.com"
 | |
|                                                  , Main.URL "twitter.com"
 | |
|                                                  , Main.URL "www.twitter.com"
 | |
|                                                  , Main.URL "youtube.com"
 | |
|                                                  , Main.URL "www.youtube.com"
 | |
|                                                  , Main.URL "instagram.com"
 | |
|                                                  , Main.URL "www.instagram.com"
 | |
|                                                  ]
 | |
|                                    , Main.allowed = []
 | |
|                                    }
 | |
|                        , Main.Rule { Main.urls = [ Main.URL "chat.googleplex.com" ]
 | |
|                                    , Main.allowed = []
 | |
|                                    }
 | |
|                        ]
 | |
| 
 | |
|   describe "Prelude.head" $ do
 | |
|     it "returns the first element of a list" $ do
 | |
|       head [23 ..] `shouldBe` (23 :: Int)
 |