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 20:12:37 +02:00
:ctrl-col
2023-08-12 10:35:33 +02:00
:select
2023-08-16 09:30:35 +02:00
:select-option
2023-08-26 09:07:49 +02:00
:search-form
2023-09-04 15:02:52 +02:00
:checkable ) )
2023-08-10 18:21:00 +02:00
( in-package :cl-sbt/tests/form )
( deftest test-simple-form-control
2023-08-12 12:04:04 +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-12 12:04:04 +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-12 12:04:04 +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-14 16:29:30 +02:00
( deftest test-simple-form-control-cols
( let ( ( result ( spinneret:with-html-string ( ctrl-col ( :id "exampleFormControlInput1" :label "Email address" :type "email" :placeholder "name@example.com" ) ) ) ) )
( testing "Generates correct HTML for a simple form using cols"
( ok ( search "for=exampleFormControlInput1" result ) )
( ok ( search "class=col-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-11 17:39:28 +02:00
( deftest test-select-default
2023-08-15 12:53:05 +02:00
( let ( ( result ( spinneret:with-html-string ( select ( ) ( :content "One" :value 1 ) ( :content "Two" :value 2 ) ( :content "Three" :value 3 ) ) ) ) )
2023-08-12 12:04:04 +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-15 12:53:05 +02:00
( let ( ( result ( spinneret:with-html-string ( select ( :size "lg" ) ( :content "One" :value 1 ) ) ) ) )
2023-08-12 12:04:04 +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 ) ) ) ) )
2023-08-11 17:39:28 +02:00
( deftest test-select-size-sm
2023-08-15 12:53:05 +02:00
( let ( ( result ( spinneret:with-html-string ( select ( :size "sm" ) ( :content "One" :value 1 ) ) ) ) )
2023-08-12 12:04:04 +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 ) ) ) ) )
2023-08-11 17:39:28 +02:00
( deftest test-select-size-multiple
2023-08-15 12:53:05 +02:00
( let ( ( result ( spinneret:with-html-string ( select ( :size "multiple" ) ( :content "One" :value 1 ) ) ) ) )
2023-08-12 12:04:04 +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 ) ) ) ) )
2023-08-11 17:39:28 +02:00
( deftest test-select-size-number
2023-08-15 12:53:05 +02:00
( let ( ( result ( spinneret:with-html-string ( select ( :size 3 ) ( :content "One" :value 1 ) ) ) ) )
2023-08-12 12:04:04 +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 ) ) ) ) )
2023-08-15 19:30:01 +02:00
( deftest test-default-search-form
2023-08-16 09:30:35 +02:00
( let ( ( result ( spinneret:with-html-string ( search-form ) ) ) )
2023-08-15 19:30:01 +02:00
( testing "Generates correct HTML for search form"
( ok ( search "class=\"form-control me-2\"" result ) )
( ok ( search "type=search" result ) )
( ok ( search "aria-label=Search" result ) )
( ok ( search "type=submit" result ) )
( ok ( search "class=\"btn btn-outline-success\"" result ) )
( ok ( search "<input" result ) )
( ok ( search "<button" result ) ) ) ) )
2023-08-26 09:07:49 +02:00
2023-09-05 21:01:37 +02:00
( deftest test-checkable
2023-09-04 15:02:52 +02:00
( let ( ( result ( spinneret:with-html-string ( checkable "radio" "age" "18-24" ) ) ) )
2023-09-05 21:01:37 +02:00
( testing "Generates correct HTML for checkable"
2023-09-06 14:30:51 +02:00
( ok ( search "class=\"form-check-label group-age\"" result ) )
2023-09-05 21:01:37 +02:00
( ok ( search "value=18-24" result ) )
2023-08-26 09:07:49 +02:00
( ok ( search "type=radio" result ) )
2023-09-04 15:02:52 +02:00
( ok ( search "name=group-age" result ) ) ) ) )