cleanup two spec files that pollute the DOM
Change-Id: Id18b3552962644d802add6776feea15e8e5170cd Reviewed-on: https://gerrit.instructure.com/107245 Tested-by: Jenkins Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com> Reviewed-by: Josh Simpson <jsimpson@instructure.com> QA-Review: Derek Bender <djbender@instructure.com> Product-Review: Keith T. Garner <kgarner@instructure.com>
This commit is contained in:
parent
f87a1909e9
commit
fadf1a8419
|
@ -51,7 +51,7 @@ import APIError from './api_error'
|
||||||
validateUsers: React.PropTypes.func.isRequired,
|
validateUsers: React.PropTypes.func.isRequired,
|
||||||
enrollUsers: React.PropTypes.func.isRequired,
|
enrollUsers: React.PropTypes.func.isRequired,
|
||||||
onClose: React.PropTypes.func,
|
onClose: React.PropTypes.func,
|
||||||
// these props are generate from store state
|
// these props are generated from store state
|
||||||
courseParams: React.PropTypes.shape(courseParamsShape),
|
courseParams: React.PropTypes.shape(courseParamsShape),
|
||||||
apiState: React.PropTypes.shape(apiStateShape),
|
apiState: React.PropTypes.shape(apiStateShape),
|
||||||
inputParams: React.PropTypes.shape(inputParamsShape),
|
inputParams: React.PropTypes.shape(inputParamsShape),
|
||||||
|
@ -270,15 +270,16 @@ import APIError from './api_error'
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
|
closeButtonLabel={cancelLabel}
|
||||||
id="add_people_modal"
|
id="add_people_modal"
|
||||||
isOpen={this.props.isOpen}
|
isOpen={this.props.isOpen}
|
||||||
label={I18n.t('Modal Dialog: Add People')}
|
label={I18n.t('Modal Dialog: Add People')}
|
||||||
closeButtonLabel={cancelLabel}
|
onRequestClose={this.close}
|
||||||
|
ref={(node) => { this.node = node; }}
|
||||||
shouldCloseOnOverlayClick={false}
|
shouldCloseOnOverlayClick={false}
|
||||||
size="medium"
|
size="medium"
|
||||||
zIndex="9999"
|
|
||||||
onRequestClose={this.close}
|
|
||||||
tabindex="-1"
|
tabindex="-1"
|
||||||
|
zIndex="9999"
|
||||||
>
|
>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
<Heading tabIndex="-1">{I18n.t('Add People')}</Heading>
|
<Heading tabIndex="-1">{I18n.t('Add People')}</Heading>
|
||||||
|
|
|
@ -81,7 +81,10 @@ export default React.createClass({
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
return (
|
return (
|
||||||
<div className="inline-block">
|
<div
|
||||||
|
className="inline-block"
|
||||||
|
ref={(node) => { this.node = node; }}
|
||||||
|
>
|
||||||
<a
|
<a
|
||||||
className="al-trigger btn"
|
className="al-trigger btn"
|
||||||
id="course_assignment_settings_link"
|
id="course_assignment_settings_link"
|
||||||
|
|
|
@ -4,135 +4,34 @@ define([
|
||||||
'react-addons-test-utils',
|
'react-addons-test-utils',
|
||||||
'jsx/add_people/components/add_people',
|
'jsx/add_people/components/add_people',
|
||||||
], (React, ReactDOM, TestUtils, AddPeople) => {
|
], (React, ReactDOM, TestUtils, AddPeople) => {
|
||||||
QUnit.module('AddPeople')
|
QUnit.module('AddPeople');
|
||||||
|
|
||||||
const props = {
|
const props = {
|
||||||
isOpen: true,
|
isOpen: true,
|
||||||
courseParams: {
|
courseParams: {
|
||||||
courseId: '1',
|
roles: [],
|
||||||
defaultInstitutionName: "Ed's House",
|
sections: []
|
||||||
inviteUsersURL: '/courses/#/invite_users',
|
|
||||||
roles: [
|
|
||||||
{
|
|
||||||
base_role_name: 'StudentEnrollment',
|
|
||||||
name: 'StudentEnrollment',
|
|
||||||
label: 'Student',
|
|
||||||
plural_label: 'Students',
|
|
||||||
id: '3',
|
|
||||||
count: 7,
|
|
||||||
manageable_by_user: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
base_role_name: 'TeacherEnrollment',
|
|
||||||
name: 'TeacherEnrollment',
|
|
||||||
label: 'Teacher',
|
|
||||||
plural_label: 'Teachers',
|
|
||||||
id: '4',
|
|
||||||
count: 1,
|
|
||||||
manageable_by_user: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
base_role_name: 'TaEnrollment',
|
|
||||||
name: 'TaEnrollment',
|
|
||||||
label: 'TA',
|
|
||||||
plural_label: 'TAs',
|
|
||||||
id: '5',
|
|
||||||
count: 0,
|
|
||||||
manageable_by_user: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
base_role_name: 'DesignerEnrollment',
|
|
||||||
name: 'DesignerEnrollment',
|
|
||||||
label: 'Designer',
|
|
||||||
plural_label: 'Designers',
|
|
||||||
id: '6',
|
|
||||||
count: 0,
|
|
||||||
manageable_by_user: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
base_role_name: 'ObserverEnrollment',
|
|
||||||
name: 'ObserverEnrollment',
|
|
||||||
label: 'Observer',
|
|
||||||
plural_label: 'Observers',
|
|
||||||
id: '7',
|
|
||||||
count: 0,
|
|
||||||
manageable_by_user: true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
sections: [
|
|
||||||
{
|
|
||||||
id: '8',
|
|
||||||
name: 'Section'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '5',
|
|
||||||
name: 'Section 0'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '6',
|
|
||||||
name: 'Section 1'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '7',
|
|
||||||
name: 'Section 2'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '9',
|
|
||||||
name: 'Section 10'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '10',
|
|
||||||
name: 'Section 20'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '11',
|
|
||||||
name: 'Section 21'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '12',
|
|
||||||
name: 'Section 22'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '2',
|
|
||||||
name: 'Section A'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '3',
|
|
||||||
name: 'Section b'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '4',
|
|
||||||
name: 'Section c'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '1',
|
|
||||||
name: 'work 101'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
apiState: {
|
apiState: {
|
||||||
isPending: 0
|
isPending: 0
|
||||||
},
|
},
|
||||||
inputParams: {
|
inputParams: {
|
||||||
searchType: 'cc_path',
|
nameList: '',
|
||||||
nameList: [],
|
}
|
||||||
role: '',
|
|
||||||
section: ''
|
|
||||||
},
|
|
||||||
userValidationResult: {
|
|
||||||
validUsers: [],
|
|
||||||
duplicates: {},
|
|
||||||
missing: {}
|
|
||||||
},
|
|
||||||
usersToBeEnrolled: [],
|
|
||||||
usersEnrolled: false
|
|
||||||
};
|
};
|
||||||
const noop = function () {};
|
|
||||||
|
|
||||||
test('renders the component', () => {
|
test('renders the component', () => {
|
||||||
TestUtils.renderIntoDocument(<AddPeople {...props} validateUsers={noop} enrollUsers={noop} onClose={noop} />);
|
const component = TestUtils.renderIntoDocument(
|
||||||
// can't use TestUtils.findRenderedDOMComponentWithClass, because it's a Modal and actually gets rendered elsewhere in the DOM
|
<AddPeople
|
||||||
|
validateUsers={() => {}}
|
||||||
|
enrollUsers={() => {}}
|
||||||
|
reset={() => {}}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
const addPeople = document.querySelectorAll('.addpeople');
|
const addPeople = document.querySelectorAll('.addpeople');
|
||||||
equal(addPeople.length, 1, 'AddPeople component rendered.');
|
equal(addPeople.length, 1, 'AddPeople component rendered.');
|
||||||
|
component.close();
|
||||||
|
ReactDOM.unmountComponentAtNode(component.node._overlay.parentElement);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
define([
|
define([
|
||||||
'react',
|
'react',
|
||||||
|
'react-dom',
|
||||||
'react-addons-test-utils',
|
'react-addons-test-utils',
|
||||||
'react-modal',
|
'react-modal',
|
||||||
'jsx/assignments/IndexMenu',
|
'jsx/assignments/IndexMenu',
|
||||||
'jsx/assignments/actions/IndexMenuActions',
|
'jsx/assignments/actions/IndexMenuActions',
|
||||||
'./createFakeStore',
|
'./createFakeStore',
|
||||||
], (React, TestUtils, Modal, IndexMenu, Actions, createFakeStore) => {
|
], (React, ReactDOM, TestUtils, Modal, IndexMenu, Actions, createFakeStore) => {
|
||||||
QUnit.module('AssignmentsIndexMenu')
|
QUnit.module('AssignmentsIndexMenu')
|
||||||
|
|
||||||
const generateProps = (overrides, initialState = {}) => {
|
const generateProps = (overrides, initialState = {}) => {
|
||||||
|
@ -24,11 +25,10 @@ define([
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderComponent = (props) => {
|
const renderComponent = props =>
|
||||||
return TestUtils.renderIntoDocument(
|
TestUtils.renderIntoDocument(
|
||||||
<IndexMenu {...props} />
|
<IndexMenu {...props} />
|
||||||
);
|
);
|
||||||
};
|
|
||||||
|
|
||||||
const context = {};
|
const context = {};
|
||||||
|
|
||||||
|
@ -57,6 +57,8 @@ define([
|
||||||
|
|
||||||
const options = TestUtils.scryRenderedDOMComponentsWithClass(component, 'al-options');
|
const options = TestUtils.scryRenderedDOMComponentsWithClass(component, 'al-options');
|
||||||
equal(options.length, 1);
|
equal(options.length, 1);
|
||||||
|
component.closeModal();
|
||||||
|
ReactDOM.unmountComponentAtNode(component.node.parentElement);
|
||||||
});
|
});
|
||||||
|
|
||||||
testCase('renders a LTI tool modal', () => {
|
testCase('renders a LTI tool modal', () => {
|
||||||
|
@ -64,6 +66,8 @@ define([
|
||||||
|
|
||||||
const modals = TestUtils.scryRenderedComponentsWithType(component, Modal);
|
const modals = TestUtils.scryRenderedComponentsWithType(component, Modal);
|
||||||
equal(modals.length, 1);
|
equal(modals.length, 1);
|
||||||
|
component.closeModal();
|
||||||
|
ReactDOM.unmountComponentAtNode(component.node.parentElement);
|
||||||
});
|
});
|
||||||
|
|
||||||
testCase('Modal visibility agrees with state modalIsOpen', () => {
|
testCase('Modal visibility agrees with state modalIsOpen', () => {
|
||||||
|
@ -74,12 +78,18 @@ define([
|
||||||
const component2 = renderComponent(generateProps({}, { modalIsOpen: false }));
|
const component2 = renderComponent(generateProps({}, { modalIsOpen: false }));
|
||||||
const modal2 = TestUtils.findRenderedComponentWithType(component2, Modal);
|
const modal2 = TestUtils.findRenderedComponentWithType(component2, Modal);
|
||||||
equal(modal2.props.isOpen, false);
|
equal(modal2.props.isOpen, false);
|
||||||
|
component1.closeModal();
|
||||||
|
component2.closeModal();
|
||||||
|
ReactDOM.unmountComponentAtNode(component1.node.parentElement);
|
||||||
|
ReactDOM.unmountComponentAtNode(component2.node.parentElement);
|
||||||
});
|
});
|
||||||
|
|
||||||
testCase('renders no iframe when there is no selectedTool in state', () => {
|
testCase('renders no iframe when there is no selectedTool in state', () => {
|
||||||
const component = renderComponent(generateProps({}, { selectedTool: null }));
|
const component = renderComponent(generateProps({}, { selectedTool: null }));
|
||||||
const iframes = TestUtils.scryRenderedDOMComponentsWithTag(component, 'iframe');
|
const iframes = TestUtils.scryRenderedDOMComponentsWithTag(component, 'iframe');
|
||||||
equal(iframes.length, 0);
|
equal(iframes.length, 0);
|
||||||
|
component.closeModal();
|
||||||
|
ReactDOM.unmountComponentAtNode(component.node.parentElement);
|
||||||
});
|
});
|
||||||
|
|
||||||
testCase('renders iframe when there is a selectedTool in state', () => {
|
testCase('renders iframe when there is a selectedTool in state', () => {
|
||||||
|
@ -98,6 +108,8 @@ define([
|
||||||
|
|
||||||
const iframes = TestUtils.scryRenderedDOMComponentsWithTag(modalPortal, 'iframe');
|
const iframes = TestUtils.scryRenderedDOMComponentsWithTag(modalPortal, 'iframe');
|
||||||
equal(iframes.length, 1);
|
equal(iframes.length, 1);
|
||||||
|
component.closeModal();
|
||||||
|
ReactDOM.unmountComponentAtNode(component.node.parentElement);
|
||||||
});
|
});
|
||||||
|
|
||||||
testCase('onWeightedToggle dispatches expected actions', () => {
|
testCase('onWeightedToggle dispatches expected actions', () => {
|
||||||
|
@ -115,5 +127,7 @@ define([
|
||||||
equal(store.dispatchedActions.length, actionsCount + 2);
|
equal(store.dispatchedActions.length, actionsCount + 2);
|
||||||
equal(store.dispatchedActions[actionsCount + 1].type, Actions.SET_WEIGHTED);
|
equal(store.dispatchedActions[actionsCount + 1].type, Actions.SET_WEIGHTED);
|
||||||
equal(store.dispatchedActions[actionsCount + 1].payload, false);
|
equal(store.dispatchedActions[actionsCount + 1].payload, false);
|
||||||
|
component.closeModal();
|
||||||
|
ReactDOM.unmountComponentAtNode(component.node.parentElement);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue