//
// Created by xajhuang on 2023/2/23.
//
#include "doctest.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "json_schema/jsoncdaccord.h"
#ifdef __cplusplus
}
#endif

TEST_SUITE("Json schema validator functions") {
    TEST_CASE("JSONCDAC VALIDATOR") {
        const char *json =
            "{\n"
            "    \"ver\": 3,\n"
            "    \"cryptoType\": 0,\n"
            "    \"timeStamp\": 1599187216753,\n"
            "    \"msgContent\": {\n"
            "        \"rangeSet\": [\n"
            "            {\n"
            "                \"dhcpRange\": \"192.168.30.50-192.168.30.60\",\n"
            "                \"netmask\": \"255.255.255.0\",\n"
            "                \"domainServer\": \"114.114.114.114, 8.8.8.8\",\n"
            "                \"gateway\": \"192.168.30.1\",\n"
            "                \"leaseTime\": 420\n"
            "            }\n"
            "        ]\n"
            "    }\n"
            "}";

        const char *sch =
            "{\n"
            "\t\"type\": \"object\",\n"
            "\t\"properties\": {\n"
            "\t\t\"ver\": {\n"
            "\t\t\t\"type\": \"string\"\t\t\t\n"
            "\t\t}\n"
            "\t},\n"
            "\t\"required\": [\n"
            "        \"ver\"\n"
            "    ]\n"
            "}";

        json_object *pJs = json_tokener_parse(json);
        json_object *pSc = json_tokener_parse(sch);

        CHECK_NE(pJs, nullptr);
        CHECK_NE(pSc, nullptr);
        int ret = jdac_validate(pJs, pSc);
        CHECK_EQ(JDAC_ERR_VALID, ret);
    }
}