[web] Export updateUrlFromStore and updateStoreFromUrl

This commit is contained in:
Matthew Shao 2017-04-30 22:40:58 +08:00
parent a7feced5de
commit 365677006c
2 changed files with 47 additions and 26 deletions

View File

@ -1,4 +1,5 @@
import initialize from '../urlState'
import { updateStoreFromUrl, updateUrlFromStore } from '../urlState'
import reduceFlows from '../ducks/flows'
import reduceUI from '../ducks/ui/index'
@ -8,47 +9,44 @@ import * as flowsActions from '../ducks/flows'
import configureStore from 'redux-mock-store'
const mockStore = configureStore()
history.replaceState = jest.fn()
describe('updateStoreFromUrl', () => {
history.replaceState = jest.fn()
let initialState = {
flows: reduceFlows(undefined, {}),
ui: reduceUI(undefined, {}),
eventLog: reduceEventLog(undefined, {})
}
it('should handle search query', () => {
window.location.hash = "#/flows?s=foo"
let store = mockStore(initialState)
initialize(store)
let store = mockStore()
updateStoreFromUrl(store)
expect(store.getActions()).toEqual([{ filter: "foo", type: "FLOWS_SET_FILTER" }])
})
it('should handle highlight query', () => {
window.location.hash = "#/flows?h=foo"
let store = mockStore(initialState)
initialize(store)
let store = mockStore()
updateStoreFromUrl(store)
expect(store.getActions()).toEqual([{ highlight: "foo", type: "FLOWS_SET_HIGHLIGHT" }])
})
it('should handle show event log', () => {
window.location.hash = "#/flows?e=true"
let store = mockStore(initialState)
initialize(store)
expect(store.getActions()).toEqual([{ type: "EVENTS_TOGGLE_VISIBILITY" }]) })
let initialState = { eventLog: reduceEventLog(undefined, {}) },
store = mockStore(initialState)
updateStoreFromUrl(store)
expect(store.getActions()).toEqual([{ type: "EVENTS_TOGGLE_VISIBILITY" }])
})
it('should handle unimplemented query argument', () => {
window.location.hash = "#/flows?foo=bar"
console.error = jest.fn()
let store = mockStore(initialState)
initialize(store)
let store = mockStore()
updateStoreFromUrl(store)
expect(console.error).toBeCalledWith("unimplemented query arg: foo=bar")
})
it('should select flow and tab', () => {
window.location.hash = "#/flows/123/request"
let store = mockStore(initialState)
initialize(store)
let store = mockStore()
updateStoreFromUrl(store)
expect(store.getActions()).toEqual([
{
flowIds: ["123"],
@ -63,17 +61,40 @@ describe('updateStoreFromUrl', () => {
})
describe('updateUrlFromStore', () => {
history.replaceState = jest.fn()
let flows = reduceFlows(undefined, flowsActions.select(123)),
initialState = {
flows: reduceFlows(flows, flowsActions.setFilter('~u foo')),
let initialState = {
flows: reduceFlows(undefined, {}),
ui: reduceUI(undefined, {}),
eventLog: reduceEventLog(undefined, {})
}
it('should update url', () => {
it('should update initial url', () => {
let store = mockStore(initialState)
initialize(store)
updateUrlFromStore(store)
expect(history.replaceState).toBeCalledWith(undefined, '', '/#/flows')
})
it('should update url', () => {
let flows = reduceFlows(undefined, flowsActions.select(123)),
state = {
...initialState,
flows: reduceFlows(flows, flowsActions.setFilter('~u foo'))
},
store = mockStore(state)
updateUrlFromStore(store)
expect(history.replaceState).toBeCalledWith(undefined, '', '/#/flows/123/request?s=~u foo')
})
})
describe('initialize', () => {
let initialState = {
flows: reduceFlows(undefined, {}),
ui: reduceUI(undefined, {}),
eventLog: reduceEventLog(undefined, {})
}
it('should handle initial state', () => {
let store = mockStore(initialState)
initialize(store)
store.dispatch({ type: "foo" })
})
})

View File

@ -15,7 +15,7 @@ const Query = {
SHOW_EVENTLOG: "e"
};
function updateStoreFromUrl(store) {
export function updateStoreFromUrl(store) {
const [path, query] = window.location.hash.substr(1).split("?", 2)
const path_components = path.substr(1).split("/")
@ -50,7 +50,7 @@ function updateStoreFromUrl(store) {
}
}
function updateUrlFromStore(store) {
export function updateUrlFromStore(store) {
const state = store.getState()
let query = {
[Query.SEARCH]: state.flows.filter,
@ -78,6 +78,6 @@ function updateUrlFromStore(store) {
}
export default function initialize(store) {
store.subscribe(() => updateUrlFromStore(store))
updateStoreFromUrl(store)
store.subscribe(() => updateUrlFromStore(store))
}