From d0d5b5b4f26a43e517802c8d542e324483a2fce6 Mon Sep 17 00:00:00 2001
From: "M. Reza Qorib" <rezaqorib96@gmail.com>
Date: Sun, 9 Apr 2017 18:25:13 +0700
Subject: [PATCH] [#140652771] #18 Refactor VacancyPage for company

---
 assets/js/VacancyPage.jsx                     | 82 ++++++++++++++-----
 assets/js/__test__/VacancyPage-test.jsx       | 21 ++++-
 .../__test__/components/VacancyList-test.jsx  |  2 +-
 3 files changed, 82 insertions(+), 23 deletions(-)

diff --git a/assets/js/VacancyPage.jsx b/assets/js/VacancyPage.jsx
index 27abae5b..abcfb1d6 100644
--- a/assets/js/VacancyPage.jsx
+++ b/assets/js/VacancyPage.jsx
@@ -6,38 +6,78 @@ import VacancyList from './components/VacancyList';
 
 export default class VacancyPage extends React.Component {
 
+  static getRole() {
+    const student = Storage.get('user-data').student;
+    const company = Storage.get('user-data').company;
+    if (student) {
+      return { id: student.id, type: 'student' };
+    } else if (company) {
+      return { id: company.id, type: 'company' };
+    }
+
+    return { id: '0', type: 'error' };
+  }
+
   constructor(props) {
     super(props);
     /* istanbul ignore next */
+    const role = VacancyPage.getRole();
     this.state = {
-      email: '',
-      password: '',
-      errorFlag: false,
       vacancies: [],
+      id: role.type,
+      role: role.type,
     };
-    this.handleItemClick = this.handleItemClick.bind(this);
   }
 
-  handleItemClick = (e, { name }) => this.setState({ activeItem: name });
+  generateVacancies() {
+    if (this.state.role === 'student') {
+      return (
+        <Tabs selected={0}>
+          <Pane label="Semua Lowongan" >
+            <VacancyList
+              key={1}
+              studentId={this.state.id}
+              url="/vacancies/"
+            />
+          </Pane>
+          <Pane label="Lamaran saya" >
+            <VacancyList
+              key={2}
+              status="Batal"
+              studentId={this.state.id}
+              url={`/students/${this.state.id}/applied-vacancies/`}
+            />
+          </Pane>
+          <Pane label="Lamaran Ditandai" >
+            <VacancyList
+              key={3}
+              studentId={this.state.id}
+              url={`/students/${this.state.id}/bookmarked-vacancies/`}
+            />
+          </Pane>
+        </Tabs>
+      );
+    } else if (this.state.role === 'company') {
+      return (
+        <VacancyList key={1} studentId={this.state.id} url="/vacancies/" />
+      );
+    }
+    console.log(this.state);
+    return (
+      <div>
+        <h3>
+          Anda tidak terautentifikasi. Harap logout dan login
+          kembali dengan akun yang benar
+        </h3>
+      </div>
+    );
+  }
 
   render() {
-    const student = Storage.get('user-data').student;
     return (
-  <div className="halamanLowongan">
-      <Tabs selected={0}>
-        <Pane label="Semua Lowongan" >
-          <VacancyList key={1} studentId={student.id}  url="/vacancies/" />
-        </Pane>
-        <Pane label="Lamaran saya" >
-          <VacancyList key={2} status="Batal" studentId={student.id} url={`/students/${student.id}/applied-vacancies/`} />
-        </Pane>
-        <Pane label="Lamaran Ditandai" >
-          <VacancyList key={3} studentId={student.id}  url={`/students/${student.id}/bookmarked-vacancies/`} />
-        </Pane>
-      </Tabs>
-
-  </div>
-
+      <div className="applicant">
+        { this.generateVacancies() }
+      </div>
     );
   }
 }
diff --git a/assets/js/__test__/VacancyPage-test.jsx b/assets/js/__test__/VacancyPage-test.jsx
index 46c18c10..fa614bf7 100644
--- a/assets/js/__test__/VacancyPage-test.jsx
+++ b/assets/js/__test__/VacancyPage-test.jsx
@@ -61,6 +61,17 @@ describe('VacancyList', () => {
     supervisor: null,
     student: null,
   };
+
+  const errorSession = {
+    url: 'http://localhost:8001/api/users/8/',
+    username: 'Tutuplapak',
+    email: '',
+    is_staff: false,
+    company: null,
+    supervisor: null,
+    student: null,
+  };
+
   it('renders for companies without problem', () => {
     Storage.set('user-data', companySession);
     const vacancyPage = ReactTestUtils.renderIntoDocument(
@@ -74,7 +85,15 @@ describe('VacancyList', () => {
     const vacancyPage = ReactTestUtils.renderIntoDocument(
       <VacancyPage studentId={1} url="test" />);
     expect(vacancyPage).to.exist;
-    expect(vacancyPage.state.role).to.equal('company');
+    expect(vacancyPage.state.role).to.equal('student');
+  });
+
+  it('renders without problem for error case', () => {
+    Storage.set('user-data', errorSession);
+    const vacancyPage = ReactTestUtils.renderIntoDocument(
+      <VacancyPage studentId={1} url="test" />);
+    expect(vacancyPage).to.exist;
+    expect(vacancyPage.state.role).to.equal('error');
   });
 });
 
diff --git a/assets/js/__test__/components/VacancyList-test.jsx b/assets/js/__test__/components/VacancyList-test.jsx
index f95f7ab9..b94249c1 100644
--- a/assets/js/__test__/components/VacancyList-test.jsx
+++ b/assets/js/__test__/components/VacancyList-test.jsx
@@ -22,7 +22,7 @@ describe('VacancyList', () => {
     updated: '2017-03-28T07:34:13.122093Z',
     verified: true,
   }];
-  const response2 = { hello: 'not-world' };
+  // const response2 = { hello: 'not-world' };
 
   it('renders without problem', () => {
     fetchMock.get('*', response);
-- 
GitLab