Skip to content

Commit

Permalink
Add more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
marcoroth committed Jul 14, 2023
1 parent 4973a8f commit d8948f8
Show file tree
Hide file tree
Showing 6 changed files with 213 additions and 5 deletions.
2 changes: 1 addition & 1 deletion javascript/controllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,4 @@ const findControllerByReflexName = (reflexName, controllers) => {
return controller
}

export { allReflexControllers, findControllerByReflexName }
export { localReflexControllers, allReflexControllers, findControllerByReflexName }
7 changes: 7 additions & 0 deletions javascript/test/attributes.attributeValue.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@ describe('attributeValue', () => {
)
})

it('returns expected attribute value for array with duplicate values', () => {
assert.equal(
attributeValue(['one', 'two', 'three', 'three', 'two', 'one']),
'one two three'
)
})

it('returns expected attribute value for array with mixed and duplicate values', () => {
assert.equal(
attributeValue([
Expand Down
111 changes: 111 additions & 0 deletions javascript/test/controllers.allReflexControllers.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
import { html, fixture, assert, nextFrame } from '@open-wc/testing'
import refute from './refute'

import ExampleController from './dummy/example_controller'
import RegularController from './dummy/regular_controller'

import { initialize } from '../stimulus_reflex'

import App from '../app'
import { application } from './dummy/application'
import { allReflexControllers } from '../controllers'

import { unloadAllControllers, registeredControllers, identifiers } from './test_helpers'

describe('allReflexControllers', () => {
beforeEach(() => {
initialize(application)
})

afterEach(() => {
unloadAllControllers()
})

it('returns StimulusReflex-enabled controller from parent', async () => {
App.app.register("sr", ExampleController)

assert.deepEqual(registeredControllers(), [
"stimulus-reflex",
"sr"
])

const element = await fixture(html`
<div data-controller="sr">
<a></a>
</div>
`)

const a = element.querySelector('a')
assert.deepEqual(identifiers(allReflexControllers(a)), ["sr"])
})

it('doesnt return regular controller from parent', async () => {
App.app.register("regular", RegularController)

assert.deepEqual(registeredControllers(), [
"stimulus-reflex",
"regular"
])

const element = await fixture(html`
<div data-controller="regular">
<a></a>
</div>
`)

const a = element.querySelector('a')
assert.isEmpty(identifiers(allReflexControllers(a)))
})

it('should return all reflex controllers from parents', async () => {
App.app.register("sr-one", ExampleController)
App.app.register("sr-two", ExampleController)
App.app.register("regular-one", RegularController)
App.app.register("regular-two", RegularController)

const element = await fixture(html`
<div data-controller="sr-one">
<div data-controller="sr-two">
<div data-controller="regular-one">
<div data-controller="regular-two">
<a></a>
</div>
</div>
</div>
</div>
`)

const a = element.querySelector('a')

const controllers = allReflexControllers(a)

assert.deepEqual(identifiers(controllers), [
"sr-two",
"sr-one",
])
})

it('should return controllers with same name', async () => {
App.app.register("sr", ExampleController)

const outer = await fixture(html`
<div data-controller="sr" id="outer">
<div data-controller="sr" id="inner">
<a></a>
</div>
</div>
`)

const a = outer.querySelector('a')
const inner = outer.querySelector('#inner')
const controllers = allReflexControllers(a)

assert.deepEqual(identifiers(controllers), [
"sr",
"sr",
])

assert.deepEqual(controllers[0].element, inner)
assert.deepEqual(controllers[1].element, outer)
})
})
79 changes: 79 additions & 0 deletions javascript/test/controllers.localReflexControllers.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { html, fixture, assert, nextFrame, oneEvent } from '@open-wc/testing'

import { application } from './dummy/application'
import ExampleController from './dummy/example_controller'
import RegularController from './dummy/regular_controller'

import App from '../app'
import { localReflexControllers } from '../controllers'
import { initialize } from '../stimulus_reflex'

import { unloadAllControllers, registeredControllers, identifiers } from './test_helpers'

describe('localReflexControllers', () => {
beforeEach(() => {
initialize(application)
})

afterEach(() => {
unloadAllControllers()
})

it('returns StimulusReflex-enabled controller', async () => {
App.app.register("sr", ExampleController)

assert.deepEqual(registeredControllers(), [
"stimulus-reflex",
"sr"
])

const element = await fixture(html`
<div data-controller="sr"></div>
`)

assert.deepEqual(identifiers(localReflexControllers(element)), ["sr"])
})

it('doesnt return regular controller', async () => {
App.app.register("sr", ExampleController)
App.app.register("regular", RegularController)

assert.deepEqual(registeredControllers(), [
"stimulus-reflex",
"sr",
"regular"
])

const element = await fixture(html`
<div data-controller="sr regular"></div>
`)

assert.deepEqual(identifiers(localReflexControllers(element)), [
"sr"
])
})

it('returns all StimulusReflex-enabled controllers', async () => {
App.app.register("sr-one", ExampleController)
App.app.register("sr-two", ExampleController)
App.app.register("regular-one", RegularController)
App.app.register("regular-two", RegularController)

assert.deepEqual(registeredControllers(), [
"stimulus-reflex",
"sr-one",
"sr-two",
"regular-one",
"regular-two"
])

const element = await fixture(html`
<div data-controller="regular-two sr-two sr-one regular-one"></div>
`)

assert.deepEqual(identifiers(localReflexControllers(element)), [
"sr-two",
"sr-one"
])
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,15 @@ import { initialize } from '../stimulus_reflex'
import App from '../app'
import { scanForReflexesOnElement } from '../scanner'

function registeredControllers () {
return Array.from(App.app.router.modulesByIdentifier.keys())
}
import { unloadAllControllers, registeredControllers } from './test_helpers'

describe('scanForReflexesOnElement', () => {
beforeEach(() => {
initialize(application)
})

afterEach(() => {
App.app.unload(registeredControllers())
unloadAllControllers()
})

it('should add the right action and controller attribute', async () => {
Expand Down
13 changes: 13 additions & 0 deletions javascript/test/test_helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import App from '../app'

export function registeredControllers () {
return Array.from(App.app.router.modulesByIdentifier.keys())
}

export function unloadAllControllers () {
App.app.unload(registeredControllers())
}

export function identifiers (controllers) {
return controllers.map(controller => controller.identifier)
}

0 comments on commit d8948f8

Please sign in to comment.