passport-next/passport-mocked

View on GitHub
examples/integration-tests/index.js

Summary

Maintainability
A
0 mins
Test Coverage
// eslint-disable-next-line import/no-unresolved
const express = require('express');
// eslint-disable-next-line import/no-extraneous-dependencies
const passport = require('@passport-next/passport');

const port = 3445;

passport.serializeUser((user, done) => { done(null, user); });
passport.deserializeUser((user, done) => { done(null, user); });

const providers = ['dropbox', 'google', 'box'];

const configs = providers.map(provider => ({
  name: provider,
  callbackURL: `http://localhost:${port}/auth/${provider}/callback`,
}));

// passport-mock
const { Strategy } = require('../../');

configs.forEach((config) => {
  passport.use(new Strategy(config, ((accessToken, refreshToken, profile, done) => {
    const doneProfile = Object.assign({}, profile);
    doneProfile.accessToken = accessToken;
    doneProfile.refreshToken = refreshToken;
    done(null, doneProfile);
  })));
});

const app = express();

app.set('view engine', 'ejs');
app.set('views', `${__dirname}/views`);
// eslint-disable-next-line import/no-unresolved
app.use(require('morgan')('dev'));
// eslint-disable-next-line import/no-unresolved
app.use(require('body-parser')());
// eslint-disable-next-line import/no-unresolved
app.use(require('express-session')({ secret: 'keyboard cat' }));

app.use(passport.initialize());
app.use(passport.session());

app.use((req, res, next) => {
  res.locals = { profile: req.user || {}, providers };
  next();
});

app.use(express.static(`${__dirname}/public`));

let count = 0;
const buildFakeProfile = function buildFakeProfile(provider) {
  return function profileHandler(req, res, next) {
    // eslint-disable-next-line no-underscore-dangle
    const strategy = passport._strategies[provider];
    // eslint-disable-next-line no-underscore-dangle
    strategy._token_response = { access_token: `${provider}-at`, expires_in: 3600 };
    // eslint-disable-next-line no-underscore-dangle, no-plusplus
    strategy._profile = { id: ++count, provider };
    next();
  };
};

providers.forEach((provider) => {
  app.get(`/auth/${provider}`, buildFakeProfile(provider), passport.authenticate(provider));
  app.get(`/auth/${provider}/callback`, passport.authenticate(provider, { successRedirect: '/', failureRedirect: '/' }));
});

app.get('/logout', (req, res) => {
  req.logout();
  res.redirect('/');
});

app.get('/', (req, res) => { res.render('index'); });

const server = app.listen(port, () => {
  const host = server.address().address;
  const { port: serverPort } = server.address();
  // eslint-disable-next-line no-console
  console.log('Passport Mock Example listening at http://%s:%s', host, serverPort);
});