           pagination: true,
           posts_per_page: 10,
           preview_length: 200,
+          posts_path: "posts",
+          posts_url: "blog",
+          tags_url: "blog/tags",
           plugins: [Serum.TestPlugin1, Serum.TestPlugin2],
           theme: Serum.TestTheme
         })

      assert String.starts_with?(msg, "unknown properties:")
    end

    test "constraint check 1" do
      map = Map.put(@base_map, :base_url, "hello")
      {:invalid, l} = validate(map)

      assert length(l) == 1
    end

    test "constraint check 2" do
      map =
        Map.merge(@base_map, %{
          base_url: "hello",
          server_root: "htttps://foo.bar/baz",
          date_format: 3,

      assert :ok = validate(map)
    end

    test "fails when the given argument is not a map" do
      assert {:invalid, _} = validate(:foo)
    end

    test "fails when only one required key is missing" do
      map = Map.delete(@base_map, :base_url)
      {:invalid, msg} = validate(map)

      assert String.starts_with?(msg, "missing required property:")
    end

    test "fails when multiple required keys are missing" do
      map = Map.drop(@base_map, [:base_url, :site_description])
      {:invalid, msg} = validate(map)

      assert String.starts_with?(msg, "missing required properties:")
    end

    test "fails when there is one extra key" do
      map = Map.put(@base_map, :foo, :bar)
      {:invalid, msg} = validate(map)

      assert String.starts_with?(msg, "unknown property:")
    end

    test "fails when there are multiple extra keys" do
      map =
        @base_map
        |> Map.put(:foo, :bar)
