dev.metalisp.sbt/tests/component/form.lisp

86 lines
4.6 KiB
Common Lisp
Raw Normal View History

2023-08-10 18:21:00 +02:00
(defpackage cl-sbt/tests/form
(:use
:cl
:cl-sbt
:rove)
(:import-from
:cl-sbt/form
2023-08-11 17:39:28 +02:00
:ctrl
2023-08-12 10:35:33 +02:00
:select
:select-option))
2023-08-10 18:21:00 +02:00
(in-package :cl-sbt/tests/form)
(deftest test-simple-form-control
2023-08-11 17:39:28 +02:00
(let ((result (spinneret:with-html-string (ctrl (:id "exampleFormControlInput1" :label "Email address" :type "email" :placeholder "name@example.com")))))
(testing "Generates correct HTML for a simple form"
(ok (search "for=exampleFormControlInput1" result))
(ok (search "class=form-label" result))
(ok (search "type=email" result))
(ok (search "class=form-control" result))
(ok (search "id=exampleFormControlInput1" result))
(ok (search "placeholder=name@example.com" result)))))
2023-08-10 18:21:00 +02:00
2023-08-11 09:59:56 +02:00
(deftest test-simple-form-control-with-text
2023-08-11 17:39:28 +02:00
(let ((result (spinneret:with-html-string (ctrl (:id "exampleFormControlInput1" :label "Email address" :type "email" :placeholder "name@example.com" :text "Your password must be 8-20 characters long" :describeby "passwordHelpBlock")))))
(testing "Generates correct HTML for a simple form with text"
(ok (search "for=exampleFormControlInput1" result))
(ok (search "class=form-label" result))
(ok (search "type=email" result))
(ok (search "class=form-control" result))
(ok (search "id=exampleFormControlInput1" result))
(ok (search "placeholder=name@example.com" result))
(ok (search "class=form-text" result))
(ok (search "Your password must" result))
(ok (search "aria-describeby=passwordHelpBlock" result))
(ok (search "id=passwordHelpBlock" result)))))
2023-08-11 09:59:56 +02:00
2023-08-10 18:21:00 +02:00
(deftest test-simple-form-control-2
2023-08-11 17:39:28 +02:00
(let ((result (spinneret:with-html-string (ctrl (:id "exampleFormControlInput1" :label "Email address" :type "email" :placeholder "name@example.com") (:id "form1" :label "Another Form" :type "email" :placeholder "name@example.com")))))
(testing "Generates correct HTML for a simple form with more than one entries"
(ok (search "for=exampleFormControlInput1" result))
(ok (search "class=form-label" result))
(ok (search "type=email" result))
(ok (search "class=form-control" result))
(ok (search "id=exampleFormControlInput1" result))
(ok (search "placeholder=name@example.com" result))
(ok (search "for=form1" result))
(ok (search "Another Form" result)))))
2023-08-11 15:49:51 +02:00
2023-08-11 17:39:28 +02:00
(deftest test-select-default
2023-08-12 10:35:33 +02:00
(let ((result (spinneret:with-html-string (select () (select-option (:content "One" :value 1) (:content "Two" :value 2) (:content "Three" :value 3))))))
2023-08-11 17:39:28 +02:00
(testing "Generates correct HTML for select element"
(ok (search "class=form-select" result))
(ok (search "aria-label=\"Default select example\"" result))
(ok (search "option value=1" result))
(ok (search "option value=2" result))
(ok (search "option value=3" result)))))
2023-08-11 15:49:51 +02:00
2023-08-11 17:39:28 +02:00
(deftest test-select-size-lg
2023-08-12 10:35:33 +02:00
(let ((result (spinneret:with-html-string (select (:size "lg") (select-option (:content "One" :value 1))))))
2023-08-11 17:39:28 +02:00
(testing "Generates correct HTML for select element"
(ok (search "class=\"form-select form-select-lg\"" result))
(ok (search "aria-label=\"Default select example\"" result))
(ok (search "option value=1" result)))))
(deftest test-select-size-sm
2023-08-12 10:35:33 +02:00
(let ((result (spinneret:with-html-string (select (:size "sm") (select-option (:content "One" :value 1))))))
2023-08-11 17:39:28 +02:00
(testing "Generates correct HTML for select element"
(ok (search "class=\"form-select form-select-sm\"" result))
(ok (search "aria-label=\"Default select example\"" result))
(ok (search "option value=1" result)))))
(deftest test-select-size-multiple
2023-08-12 10:35:33 +02:00
(let ((result (spinneret:with-html-string (select (:size "multiple") (select-option (:content "One" :value 1))))))
2023-08-11 17:39:28 +02:00
(testing "Generates correct HTML for select element"
(ok (search "class=form-select" result))
(ok (search "multiple" result))
(ok (search "option value=1" result)))))
(deftest test-select-size-number
2023-08-12 10:35:33 +02:00
(let ((result (spinneret:with-html-string (select (:size 3) (select-option (:content "One" :value 1))))))
2023-08-11 17:39:28 +02:00
(testing "Generates correct HTML for select element"
(ok (search "class=form-select" result))
(ok (search "size=3" result))
(ok (search "option value=1" result)))))