/* global expect */
import React from 'react';
import ShallowRenderer from 'react-test-renderer/shallow';
import renderer from 'react-test-renderer';
import { UniversalNav } from './components/UniversalNav';
import { AuthOrProfile } from './components/NavLinks';
describe('', () => {
const UniversalNavProps = {
displayMenu: false,
menuButtonRef: {},
searchBarRef: {},
toggleDisplayMenu: function() {},
pathName: '/'
};
it('renders to the DOM', () => {
const shallow = new ShallowRenderer();
shallow.render();
const result = shallow.getRenderOutput();
expect(result).toBeTruthy();
});
});
describe('', () => {
it('shows Curriculum and Sign In buttons on landing page', () => {
const landingPageProps = {
user: {
username: 'test-user',
picture: 'https://freecodecamp.org/image.png'
},
pending: false,
pathName: '/'
};
const shallow = new ShallowRenderer();
shallow.render();
const result = shallow.getRenderOutput();
// expect(result.props.children).toEqual('Sign In');
expect(deepChildrenProp(result, 0).children === 'Curriculum').toBeTruthy();
expect(
result.props.children[1].props['data-test-label'] === 'landing-small-cta'
).toBeTruthy();
});
it('has Curriculum and Portfolio links when user signed in on /learn', () => {
const defaultUserProps = {
user: {
username: 'test-user',
picture: 'https://freecodecamp.org/image.png',
isDonating: true
},
pending: false,
pathName: '/learn'
};
const shallow = new ShallowRenderer();
shallow.render();
const result = shallow.getRenderOutput();
expect(hasCurriculumNavItem(result)).toBeTruthy();
expect(hasProfileNavItem(result)).toBeTruthy();
});
it('has avatar with default border for default users', () => {
const defaultUserProps = {
user: {
username: 'test-user',
picture: 'https://freecodecamp.org/image.png'
},
pending: false,
pathName: '/learn'
};
const componentTree = renderer
.create()
.toJSON();
expect(avatarHasClass(componentTree, 'default-border')).toBeTruthy();
});
it('has avatar with gold border for donating users', () => {
const donatingUserProps = {
user: {
username: 'test-user',
picture: 'https://freecodecamp.org/image.png',
isDonating: true
},
pending: false,
pathName: '/learn'
};
const componentTree = renderer
.create()
.toJSON();
expect(avatarHasClass(componentTree, 'gold-border')).toBeTruthy();
});
it('has avatar with green border for top contributors', () => {
const topContributorUserProps = {
user: {
username: 'test-user',
picture: 'https://freecodecamp.org/image.png',
yearsTopContributor: [2020]
},
pending: false,
pathName: '/learn'
};
const componentTree = renderer
.create()
.toJSON();
expect(avatarHasClass(componentTree, 'green-border')).toBeTruthy();
});
it('has avatar with purple border for donating top contributors', () => {
const topDonatingContributorUserProps = {
user: {
username: 'test-user',
picture: 'https://freecodecamp.org/image.png',
isDonating: true,
yearsTopContributor: [2020]
},
pending: false,
pathName: '/learn'
};
const componentTree = renderer
.create()
.toJSON();
expect(avatarHasClass(componentTree, 'purple-border')).toBeTruthy();
});
});
const deepChildrenProp = (component, childNumber) =>
component.props.children[childNumber].props.children.props;
const hasProfileNavItem = component => {
const profileElement = deepChildrenProp(component, 1);
return (
profileElement.children[0] === 'Profile' &&
profileElement.to === '/test-user'
);
};
const hasCurriculumNavItem = component => {
const curriculumElement = deepChildrenProp(component, 0);
return (
curriculumElement.children === 'Curriculum' &&
curriculumElement.to === '/learn'
);
};
const avatarHasClass = (componentTree, classes) => {
return (
componentTree[1].children[0].children[1].props.className ===
'avatar-container ' + classes
);
};