diff --git a/app/assets/javascripts/discourse/app/components/d-modal.hbs b/app/assets/javascripts/discourse/app/components/d-modal.hbs index 9a16560ca68..d91888fe2f7 100644 --- a/app/assets/javascripts/discourse/app/components/d-modal.hbs +++ b/app/assets/javascripts/discourse/app/components/d-modal.hbs @@ -4,6 +4,7 @@ @@ -151,5 +153,55 @@ acceptance("Modal service: component-based API", function () { ); }); + test("alongside declarative modals", async function (assert) { + class State { + @tracked showDeclarativeModal; + } + + const testState = new State(); + const closeModal = () => (testState.showDeclarativeModal = false); + + const MyConnector = ; + + registerTemporaryModule( + "discourse/plugins/my-plugin/connectors/below-footer/connector-name", + MyConnector + ); + + await visit("/"); + + const modalService = getOwner(this).lookup("service:modal"); + + modalService.show(MyModalClass); + await settled(); + assert.dom(".d-modal.service-modal").exists("modal should appear"); + + testState.showDeclarativeModal = true; + await settled(); + assert + .dom(".d-modal.declarative-modal") + .exists("declarative modal should appear"); + assert.dom(".d-modal.service-modal").exists("service modal should remain"); + + await click(".d-modal.declarative-modal .modal-close"); + assert + .dom(".d-modal.declarative-modal") + .doesNotExist("declarative modal should close"); + assert.dom(".d-modal.service-modal").exists("service modal should remain"); + + await click(".d-modal.service-modal .modal-close"); + assert.dom(".d-modal").doesNotExist("all modals closed"); + }); + // (See also, `tests/integration/component/d-modal-test.js`) });