;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS INC Sucursal en España SL

(ns backend-tests.rpc-doc-test
  "Internal binfile test, no RPC involved"
  (:require
   [app.common.json :as json]
   [app.common.pprint :as pp]
   [app.common.schema :as sm]
   [app.common.schema.generators :as sg]
   [app.common.schema.test :as smt]
   [app.config :as cf]
   [app.rpc :as-alias rpc]
   [app.rpc.doc :as rpc.doc]
   [backend-tests.helpers :as th]
   [clojure.test :as t]
   [yetti.response :as-alias yres]))

(t/use-fixtures :once th/state-init)

(t/deftest openapi-context-json-encode
  (smt/check!
   (smt/for [context (->> sg/int
                          (sg/fmap (fn [_]
                                     (#'rpc.doc/openapi-context (::rpc/methods th/*system*)))))]
     (try
       (json/encode context)
       true
       (catch Throwable _cause
         false)))
   {:num 15}))

(t/deftest doc-handler-returns-html-content-type
  (with-redefs [cf/flags #{:backend-api-doc}]
    (let [methods (::rpc/methods th/*system*)
          handler (#'rpc.doc/handler :methods methods
                                     :label "main"
                                     :entrypoint "http://localhost/api/main/methods"
                                     :openapi "http://localhost/api/main/doc/openapi"
                                     :template "app/templates/main-api-doc.tmpl")
          request {}
          response (handler request)]
      (t/is (= 200 (::yres/status response)))
      (t/is (= "text/html; charset=utf-8"
               (get-in response [::yres/headers "content-type"]))))))

