initiatived21/d21

View on GitHub
client/app/SocialMediaButtons/components/ButtonsCombined_test.js

Summary

Maintainability
A
0 mins
Test Coverage
import React from 'react'
import FontAwesome from 'react-fontawesome'
import { shallow, mount } from 'enzyme'
import sinon from 'sinon'

import FacebookButton from './FacebookButton'
import TwitterButton from './TwitterButton'
import GoogleplusButton from './GoogleplusButton'
import LinkedinButton from './LinkedinButton'
import XingButton from './XingButton'

describe('Social media button', function() {
  var tests = [
    {
      component: FacebookButton,
      componentName: 'FacebookButton',
      expectedUrl: 'https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.example.com'
    },
    {
      component: TwitterButton,
      componentName: 'TwitterButton',
      expectedUrlRegex: /^https:\/\/twitter\.com\/intent\/tweet\?text=[0-9a-z%]*&url=http%3A%2F%2Fwww\.example\.com$/
    },
    {
      component: GoogleplusButton,
      componentName: 'GoogleplusButton',
      expectedUrl: 'https://plus.google.com/share?url=http%3A%2F%2Fwww.example.com'
    },
    {
      component: LinkedinButton,
      componentName: 'LinkedinButton',
      expectedUrl: 'https://www.linkedin.com/cws/share?url=http%3A%2F%2Fwww.example.com'
    },
    {
      component: XingButton,
      componentName: 'XingButton',
      expectedUrl: 'https://www.xing.com/social_plugins/share?url=http%3A%2F%2Fwww.example.com'
    }
  ]

  tests.forEach(function(test) {
    describe(`<${test.componentName} />`, function() {
      it('should render', function() {
        const wrapper = shallow(React.createElement(test.component,
          { url: '', handleClick: () => null }))

        wrapper.find('li').length.should.equal(1)
        wrapper.find('a').length.should.equal(1)
        wrapper.find(FontAwesome).length.should.equal(1)
      })

      it('should link to the correct URL', function() {
        const wrapper = shallow(React.createElement(test.component,
          { url: 'http://www.example.com', handleClick: () => null }))
        const href = wrapper.find('a').at(0).props().href

        if (test.expectedUrl) {
          href.should.equal(test.expectedUrl)
        }
        else if (test.expectedUrlRegex) {
          href.should.match(test.expectedUrlRegex)
        }
      })

      it('should call the click handler if clicked', function() {
        const onButtonClick = sinon.spy()
        const wrapper = mount(React.createElement(test.component,
          { url: '', handleClick: onButtonClick }))

        wrapper.find('a').simulate('click')
        onButtonClick.calledOnce.should.be.true
      })
    })
  })
})