mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
As per review comment, use data-disable-with="false" do prevent Rails from automatically enabling the "Apply" button. We can then remove the timeout hack.
82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
/**
|
|
* @jest-environment jsdom
|
|
*/
|
|
|
|
import { Application } from "stimulus"
|
|
import toggle_button_disabled_controller from "../../../app/webpacker/controllers/toggle_button_disabled_controller"
|
|
|
|
describe("ButtonEnableToggleController", () => {
|
|
beforeAll(() => {
|
|
const application = Application.start()
|
|
application.register("toggle-button-disabled", toggle_button_disabled_controller)
|
|
})
|
|
|
|
beforeEach(() => {
|
|
document.body.innerHTML = `
|
|
<form id="test-form" data-controller="toggle-button-disabled">
|
|
<input id="test-input" type="input" data-action="input->toggle-button-disabled#inputIsChanged" />
|
|
<input
|
|
id="test-submit"
|
|
type="submit"
|
|
data-disable-with="false"
|
|
data-toggle-button-disabled-target="button"
|
|
/>
|
|
</form>
|
|
`
|
|
})
|
|
|
|
describe("#connect", () => {
|
|
it("disables the target submit button", () => {
|
|
const submit = document.getElementById("test-submit")
|
|
expect(submit.disabled).toBe(true)
|
|
})
|
|
|
|
describe("when no button present", () => {
|
|
beforeEach(() => {
|
|
document.body.innerHTML = `
|
|
<form id="test-form" data-controller="toggle-button-disabled">
|
|
<input id="test-input" type="input" data-action="input->toggle-button-disabled#inputIsChanged" />
|
|
</form>
|
|
`
|
|
})
|
|
|
|
// I am not sure if it's possible to manually trigger the loading/connect of the controller to
|
|
// try catch the error, so leaving as this. It will break if the missing target isn't handled
|
|
// properly
|
|
it("doesn't break", () => {})
|
|
})
|
|
})
|
|
|
|
describe("#formIsChanged", () => {
|
|
let input
|
|
let submit
|
|
|
|
beforeEach(() => {
|
|
input = document.getElementById("test-input")
|
|
submit = document.getElementById("test-submit")
|
|
})
|
|
|
|
describe("when the input value is not empty", () => {
|
|
it("enables the target button", () => {
|
|
input.value = "test"
|
|
input.dispatchEvent(new Event("input"));
|
|
|
|
expect(submit.disabled).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe("when the input value is empty", () => {
|
|
it("disables the target button", () => {
|
|
// setting up state where target button is enabled
|
|
input.value = "test"
|
|
input.dispatchEvent(new Event("input"));
|
|
|
|
input.value = ""
|
|
input.dispatchEvent(new Event("input"));
|
|
|
|
expect(submit.disabled).toBe(true)
|
|
})
|
|
})
|
|
})
|
|
})
|