Guest User

Untitled

a guest
Nov 23rd, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. test('It should simulate submit action ', ()=>{
  2. let contactUs = shallow(<ContactUs />);
  3. sinon.spy(ContactUs.prototype, 'submitMessage');// Verify this method call
  4. let form = contactUs.find(Form)
  5. expect(form.length).toBe(1);//Failing over here
  6. let button = form.dive().find(Button);
  7. expect(button.length).toBe(1);
  8. button.setState({disabled : false});//Need to achieve this
  9. expect(button).toBeDefined();
  10. expect(button.length).toBe(1);
  11. expect(button.props().label).toBe('SEND MESSAGE');
  12.  
  13. button.find('a').get(0).simulate('click');
  14. expect(ContactUs.prototype.submitMessage).toHaveProperty('callCount',
  15. 1);
  16. });
  17.  
  18. import React, {Component,PropTypes} from 'react';
  19. import Form from './form';
  20. import {sendSubscriptionMessage} from '../../network';
  21. import Button from '../Fields/Button';
  22.  
  23. export default class ContactUs extends Component {
  24.  
  25. constructor(props) {
  26. super(props);
  27. this.state = {
  28. contactData: {}
  29. }
  30. }
  31.  
  32. onChangeHandler(event) {
  33. let value = event.target.value;
  34. this.state.contactData[event.target.name] = value;
  35. }
  36.  
  37. submitMessage(event) {
  38. event.preventDefault();
  39. sendSubscriptionMessage(this.state.contactData);
  40. }
  41.  
  42. render() {
  43. return (<div className = "row pattern-black contact logo-container" id = "contact">
  44. <div className = "container" >
  45. <h2 className = "sectionTitle f-damion c-white mTop100" >
  46. Get in Touch!
  47.  
  48. <Form onChangeHandler = {
  49. this.onChangeHandler.bind(this)
  50. } >
  51. <Button onClick = {
  52. this.submitMessage.bind(this)
  53. }
  54. className = "gradientButton pink inverse mTop50"
  55. label = "SEND MESSAGE" / >
  56. </Form> </div>
  57. </div>
  58. );
  59. }
  60. }
  61.  
  62. import React,{Component , PropTypes} from 'react';
  63. import TextField from '../Fields/TextField';
  64.  
  65. export default class Form extends Component{
  66.  
  67. static propTypes ={
  68. onChangeHandler : PropTypes.func.isRequired
  69. }
  70.  
  71.  
  72. render(){
  73.  
  74. return(
  75. <form>
  76. <div className="col-lg-8 col-centered">
  77. <div className="col-lg-6">
  78. <TextField name="name" label="Name" required={true}
  79. onChangeHandler = {this.props.onChangeHandler}/>
  80. </div>
  81. <div className="col-lg-6">
  82. <TextField name="email" type="email" label="Email" required=
  83. {true} onChangeHandler = {this.props.onChangeHandler}/>
  84. </div>
  85. </div>
  86. <div className="col-lg-10 col-centered">
  87. <div className="col-lg-12">
  88. <TextField name="message" label="Message" required={true}
  89. onChangeHandler = {this.props.onChangeHandler}/>
  90. </div>
  91. </div>
  92. {this.props.children}
  93. </form>
  94. )
  95. }
  96.  
  97.  
  98. }
  99.  
  100. import React,{Component,PropTypes} from 'react';
  101. import classNames from 'classnames';
  102.  
  103. export default class Button extends Component{
  104.  
  105. static propTypes = {
  106. onClick : PropTypes.func.isRequired,
  107. label : PropTypes.string,
  108. wrapperClass : PropTypes.string,
  109. btnClass : PropTypes.string,
  110. url : PropTypes.string,
  111. }
  112.  
  113. static defaultProps = {
  114. wrapperClass : 'col-lg-12 t-center',
  115. btnClass : '',
  116. label : 'SEND MESSAGE'
  117. }
  118.  
  119. constructor(props){
  120. super(props);
  121. this.state = {
  122. disabled : false
  123. };
  124. }
  125.  
  126. componentDidMount() {
  127. let forms = document.querySelectorAll('form');
  128.  
  129. for (let form of forms) {
  130.  
  131. if (form.contains(this.buttonEl)) {
  132. this.formEl = form;
  133. break;
  134. }
  135. }
  136.  
  137. if (this.formEl) {
  138. this.toggleDisabled();
  139. this.formEl.addEventListener( 'click',
  140. this.toggleDisabled.bind(this));
  141. this.formEl.addEventListener('input',
  142. this.toggleDisabled.bind(this));
  143. }
  144. }
  145.  
  146. toggleDisabled() {
  147. setTimeout(() => {
  148. this.setState({
  149. disabled: !this.formEl.checkValidity(),
  150. });
  151. }, 100);
  152.  
  153. }
  154.  
  155.  
  156. render(){
  157. let btnCls = `${this.props.btnClass} gradientButton pink inverse
  158. mTop50`;
  159. let btnClass = classNames({
  160. [btnCls] : true,
  161. 'disable-link' : this.state.disabled
  162. });
  163.  
  164. return(
  165. <div ref={(x) => this.buttonEl = x} className=
  166. {this.props.wrapperClass} >
  167. <a href={this.props.url ? this.props.url : null} onClick =
  168. {this.props.onClick} className={btnClass}>{this.props.label}</a>
  169. </div>
  170. );
  171. }
  172.  
  173. }
Add Comment
Please, Sign In to add comment