Как написать интеграционный тест для потока OAuth Google с использованием passport?

#http #oauth #passport.js

#http #oauth #passport.js

Вопрос:

У меня есть следующий код в качестве controller :

 require('dotenv').config();
const passport = require('passport');
const models = require('../models');
const GoogleStrategy = require('passport-google-oauth20').Strategy;


const strategyCallback = async (accessToken, refreshToken, profile, cb) => {
    // To be replaced with googleId once other models are merged to dev
    const email = profile.emails[0].value;
    try {
        let user = await models.user.findOne({ where: { email } });
        if (!user) {
            // Other fields will be added once the rest of the models are merged to dev
            user = await models.user.create({ email });
        } else {
            return cb(null, profile);
        }
    } catch(e) {
        return cb(e, false);
    }
}

passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_SECRET,
    callbackURL: process.env.GOOGLE_CALLBACK
    },
    strategyCallback
));


const authenticate = passport.authenticate('google', {
    scope: ['profile', 'email']
});

const authenticateCallback = passport.authenticate('google', {
    session: false,
    successRedirect: '/users',
    failureRedirect: '/auth/failed'
});

const isLoggedIn = async (req, res) => {
    if (!req.user) {
        res.status(404).json({error: 'User not logged in!'});
    }
}

const logOut = async (req, res) => {
    req.logout();
    res.redirect('/');
}

module.exports = {
    authenticate,
    authenticateCallback,
    isLoggedIn,
    logOut
};
 

Я использую jest для тестирования и passport-google-oauth20 вместе Sequelize с Postgresql ним для базы данных.

Я могу войти в систему и создать пользователя в базе данных, поток работает, когда я тестирую это в браузере, но я не уверен, как на самом деле написать интеграционный тест для этого. Я просмотрел несколько пакетов, но их там немного.

Должен ли я просто сделать макет http-запроса где-нибудь? Действительно не уверен, как это проверить!

О, и я использую AccessTokens только для аутентификации.