Advertisement
Guest User

Untitled

a guest
Apr 13th, 2017
543
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.38 KB | None | 0 0
  1. import React from "react";
  2.  
  3. export class Newsletter extends React.Component {
  4. constructor() {
  5. super();
  6.  
  7. this.state = {
  8. valid: null,
  9. sending: false
  10. }
  11.  
  12. this.validateEmail = this.validateEmail.bind(this);
  13. this.submitForm = this.submitForm.bind(this);
  14. }
  15.  
  16. validateEmail() {
  17. const self = this;
  18. let emailData = this.refs.email.value;
  19.  
  20. if ( emailData.includes('@') && emailData.indexOf('.') > -1 ) {
  21. if ( !self.state.valid ) {
  22. self.setState({
  23. valid: true
  24. })
  25. }
  26. } else {
  27. if ( self.state.valid || self.state.valid === null ) {
  28. self.setState({
  29. valid: false
  30. })
  31. }
  32. }
  33. }
  34.  
  35. submitForm(event) {
  36. event.preventDefault();
  37.  
  38. if ( !this.state.valid ) {
  39. return false;
  40. }
  41.  
  42. this.setState({
  43. sending: true
  44. })
  45.  
  46. // Send data to the database
  47. }
  48.  
  49. render() {
  50. const state = this.state;
  51. let inputClass;
  52.  
  53. if ( state.valid === false ) {
  54. inputClass = 'invalid';
  55. } else if ( state.valid === true ) {
  56. inputClass = 'valid'
  57. }
  58.  
  59. return (
  60. <form>
  61. <input type="email" className={inputClass} onChange={this.validateEmail} ref="email" name="email" placeholder="E-mail" required />
  62. <button disabled={state.sending} onClick={this.submitForm}>Subscribe</button>
  63. </form>
  64. );
  65. }
  66. }
  67.  
  68. import React from "react";
  69.  
  70. import { mount } from "enzyme";
  71. import toJson from "enzyme-to-json";
  72.  
  73. import { Newsletter } from "./Newsletter";
  74.  
  75. describe("Teste newsletter footer component", () => {
  76. it("Should render as expected", () => {
  77. const tree = toJson(mount(<Newsletter />));
  78.  
  79. expect(tree).toMatchSnapshot();
  80. });
  81.  
  82. describe("Input class", () => {
  83. let wrapper, input;
  84.  
  85. beforeEach(function() {
  86. wrapper = mount(<Newsletter />);
  87. input = wrapper.find("input");
  88. })
  89.  
  90. it("Should be empty", () => {
  91. expect( wrapper.find('.valid').length ).toBe(0);
  92. expect( wrapper.find('.invalid').length ).toBe(0);
  93. });
  94.  
  95. it("Should be 'invalid'", () => {
  96. input.node.value = "name@email";
  97. input.simulate("change");
  98.  
  99. expect( wrapper.find('.invalid').length ).toBe(1);
  100. });
  101.  
  102. it("Should be 'valid'", () => {
  103. input.node.value = "name@email.com.br";
  104. input.simulate("change");
  105.  
  106. expect( wrapper.find('.valid').length ).toBe(1);
  107. });
  108. });
  109.  
  110. describe("Validate e-mail", () => {
  111. let wrapper, input;
  112.  
  113. beforeEach(function() {
  114. wrapper = mount(<Newsletter />);
  115. input = wrapper.find("input");
  116. })
  117.  
  118. it("Should be invalid", () => {
  119. input.node.value = "name";
  120. input.simulate("change");
  121. expect( wrapper.state().valid ).toBeFalsy();
  122.  
  123. input.node.value = "name@email";
  124. input.simulate("change");
  125. expect( wrapper.state().valid ).toBeFalsy();
  126. });
  127.  
  128. it("Should be valid", () => {
  129. input.node.value = "name@email.com";
  130. input.simulate("change");
  131. expect( wrapper.state().valid ).toBeTruthy();
  132.  
  133. input.node.value = "name@email.com.br";
  134. input.simulate("change");
  135. expect( wrapper.state().valid ).toBeTruthy();
  136. });
  137. });
  138.  
  139. describe("Submit the form", () => {
  140. let wrapper, input;
  141.  
  142. beforeEach(function() {
  143. wrapper = mount(<Newsletter />);
  144. input = wrapper.find("input");
  145. })
  146.  
  147. it("Should not be submiting", () => {
  148. input.node.value = "name@email";
  149. input.simulate("change");
  150. wrapper.find("button").simulate("click", {
  151. preventDefault: () => {}
  152. });
  153.  
  154. expect( wrapper.state().sending ).toBeFalsy();
  155. });
  156.  
  157. it("Should be submiting", () => {
  158. input.node.value = "name@email.com";
  159. input.simulate("change");
  160. wrapper.find("button").simulate("click", {
  161. preventDefault: () => {}
  162. });
  163.  
  164. expect( wrapper.state().sending ).toBeTruthy();
  165. });
  166. });
  167. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement