| defmodule Plausible.Stats.JSONSchema.UtilsTest do |
| use ExUnit.Case, async: true |
|
|
| alias Plausible.Stats.JSONSchema |
|
|
| describe "traversing" do |
| test "transform 'fn value -> value end' does not drop anything" do |
| json = %{foo: %{bar: [0, ""], baz: nil, pax: %{}}} |
| assert JSONSchema.Utils.traverse(json, fn value -> value end) == json |
| end |
|
|
| test "can remove specific items, keeping the original order of lists" do |
| assert JSONSchema.Utils.traverse( |
| %{ |
| foo: [ |
| "a", |
| %{type: "string", "$comment": "only :internal"}, |
| %{type: "number"} |
| ] |
| }, |
| fn |
| %{"$comment": "only :internal"} -> :remove |
| value -> value |
| end |
| ) == %{foo: ["a", %{type: "number"}]} |
| end |
|
|
| test "can transform specific items" do |
| assert JSONSchema.Utils.traverse( |
| %{ |
| foo: [ |
| %{type: "string", "$comment": "anything"}, |
| %{type: "number"} |
| ] |
| }, |
| fn |
| %{"$comment": "anything"} -> %{type: "number", "$comment": "transformed"} |
| value -> value |
| end |
| ) == %{foo: [%{type: "number", "$comment": "transformed"}, %{type: "number"}]} |
| end |
| end |
| end |
|
|