From fc2096a992909b5f6725fa257c8fbb18f9b6349f Mon Sep 17 00:00:00 2001
From: Sebastian Mihalache <sebi.mihalache@gmail.com>
Date: Thu, 22 Nov 2018 11:53:57 +0200
Subject: [PATCH] feat(user-graphql): build component structure

---
 packages/component-user/index.js              |  10 ++
 .../component-user/migrations/001-user.sql    |   6 +
 packages/component-user/resolvers.js          |   0
 packages/component-user/typeDefs.js           |  13 ++
 packages/component-user/user.js               |   0
 .../graphql/LoginContainer.test.jsx           | 144 ------------------
 packages/xpub-faraday/config/default.js       |   4 +
 7 files changed, 33 insertions(+), 144 deletions(-)
 create mode 100644 packages/component-user/index.js
 create mode 100644 packages/component-user/migrations/001-user.sql
 create mode 100644 packages/component-user/resolvers.js
 create mode 100644 packages/component-user/typeDefs.js
 create mode 100644 packages/component-user/user.js
 delete mode 100644 packages/pubsweet-component-login/graphql/LoginContainer.test.jsx

diff --git a/packages/component-user/index.js b/packages/component-user/index.js
new file mode 100644
index 000000000..307f862c0
--- /dev/null
+++ b/packages/component-user/index.js
@@ -0,0 +1,10 @@
+const resolvers = require('./resolvers')
+const typeDefs = require('./typeDefs')
+const model = require('./user')
+
+module.exports = {
+  model,
+  modelName: 'User',
+  resolvers,
+  typeDefs,
+}
diff --git a/packages/component-user/migrations/001-user.sql b/packages/component-user/migrations/001-user.sql
new file mode 100644
index 000000000..36c7a4ed5
--- /dev/null
+++ b/packages/component-user/migrations/001-user.sql
@@ -0,0 +1,6 @@
+CREATE TABLE "user" (
+    id UUID PRIMARY KEY,
+    created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT current_timestamp,
+    updated TIMESTAMP WITH TIME ZONE,
+    default_identity TEXT
+);
\ No newline at end of file
diff --git a/packages/component-user/resolvers.js b/packages/component-user/resolvers.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/component-user/typeDefs.js b/packages/component-user/typeDefs.js
new file mode 100644
index 000000000..6247dc4a4
--- /dev/null
+++ b/packages/component-user/typeDefs.js
@@ -0,0 +1,13 @@
+const typeDefs = `
+  extend type Query {
+    users: [User]
+  }
+
+  extend type Mutation {
+    confirmUser(input: confirmUserInput): User!
+  }
+
+
+`
+
+module.exports = typeDefs
diff --git a/packages/component-user/user.js b/packages/component-user/user.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/pubsweet-component-login/graphql/LoginContainer.test.jsx b/packages/pubsweet-component-login/graphql/LoginContainer.test.jsx
deleted file mode 100644
index 7df5518ba..000000000
--- a/packages/pubsweet-component-login/graphql/LoginContainer.test.jsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import React from 'react'
-import { mount } from 'enzyme'
-import { MockedProvider } from 'react-apollo/test-utils'
-import { ThemeProvider } from 'styled-components'
-import { MemoryRouter, Route } from 'react-router-dom'
-
-import wait from 'waait'
-import { LOGIN_USER } from './mutations'
-import LoginContainer from './LoginContainer'
-
-const user1 = {
-  id: 'user1',
-  username: 'admin',
-  password: 'adminadmin',
-  admin: true,
-  teams: [],
-}
-
-const mocks = currentUser => [
-  {
-    request: {
-      query: LOGIN_USER,
-      variables: {
-        input: {
-          username: currentUser.username,
-          password: currentUser.password,
-        },
-      },
-    },
-    result: {
-      data: {
-        loginUser: {
-          user: currentUser,
-          token: 'greatToken',
-        },
-      },
-    },
-  },
-  {
-    request: {
-      query: LOGIN_USER,
-      variables: {
-        input: {
-          username: currentUser.username,
-          password: 'wrongPassword',
-        },
-      },
-    },
-    result: {
-      data: { loginUser: null },
-      errors: [{ message: 'Wrong username or password.' }],
-    },
-  },
-]
-
-let globalLocation
-
-function makeDeepWrapper(currentUser, props = {}) {
-  // A theme is needed because some components use colors
-  // specified in the theme to render themselves (e.g. Link)
-  const theme = {
-    colorPrimary: '#fff',
-    colorSecondary: '#fff',
-  }
-
-  return mount(
-    <ThemeProvider theme={theme}>
-      <MockedProvider addTypename={false} mocks={mocks(currentUser)}>
-        <MemoryRouter initialEntries={['/login']}>
-          <Route
-            {...props}
-            render={p => {
-              globalLocation = p.location
-              return <LoginContainer {...p} />
-            }}
-          />
-        </MemoryRouter>
-      </MockedProvider>
-    </ThemeProvider>,
-  )
-}
-
-describe('LoginContainer', () => {
-  beforeEach(() => {
-    window.localStorage.clear()
-    globalLocation = undefined
-  })
-
-  it('renders the login form', () => {
-    const wrapper = makeDeepWrapper(user1)
-    wrapper.update()
-
-    const fields = wrapper.find('Login')
-    expect(fields).toHaveLength(1)
-  })
-
-  it('submits login information and logs the user in', async () => {
-    const wrapper = makeDeepWrapper(user1)
-    wrapper.update()
-
-    const usernameField = wrapper.find('TextField[label="Username"] input')
-    usernameField.getDOMNode().value = user1.username
-    usernameField.simulate('change')
-    const passwordField = wrapper.find('TextField[label="Password"] input')
-    passwordField.getDOMNode().value = user1.password
-    passwordField.simulate('change')
-
-    wrapper.update()
-    const button = wrapper.find('button')
-    button.simulate('submit')
-
-    wrapper.update()
-    await wait(50)
-
-    expect(window.localStorage.token).toEqual('greatToken')
-    expect(globalLocation.pathname).toEqual('/testRedirect')
-  })
-
-  it('does not log in user with incorrect credentials', async () => {
-    const wrapper = makeDeepWrapper(user1)
-    wrapper.update()
-
-    const usernameField = wrapper.find('TextField[label="Username"] input')
-    usernameField.getDOMNode().value = user1.username
-    usernameField.simulate('change')
-    const passwordField = wrapper.find('TextField[label="Password"] input')
-    passwordField.getDOMNode().value = 'wrongPassword'
-    passwordField.simulate('change')
-
-    wrapper.update()
-    const button = wrapper.find('button')
-
-    button.simulate('submit')
-
-    wrapper.update()
-    await wait(50)
-
-    expect(wrapper.find('Login').text()).toContain(
-      'Wrong username or password.',
-    )
-    expect(window.localStorage.token).toEqual(undefined)
-    expect(globalLocation.pathname).toEqual('/login')
-  })
-})
diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js
index 4ac021c51..a410fa43e 100644
--- a/packages/xpub-faraday/config/default.js
+++ b/packages/xpub-faraday/config/default.js
@@ -44,6 +44,10 @@ module.exports = {
     logger,
     uploads: 'uploads',
     secret: 'SECRET',
+    enableExperimentalGraphql: true,
+    graphiql: true,
+    // typeDefs: authors.typeDefs,
+    // resolvers,
   },
   'pubsweet-client': {
     API_ENDPOINT: '/api',
-- 
GitLab