-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add facebook login tests #101
Conversation
The returned user schema should be properly checked before being inserted into the database
Codecov Report
@@ Coverage Diff @@
## fb-integration #101 +/- ##
==================================================
+ Coverage 86.95% 91.93% +4.97%
==================================================
Files 21 21
Lines 460 471 +11
Branches 19 20 +1
==================================================
+ Hits 400 433 +33
+ Misses 60 38 -22
Continue to review full report at Codecov.
|
src/middlewares/facebook.js
Outdated
@@ -48,7 +48,7 @@ const handleLogin = (req, res, next, fUser) => { | |||
firstName: fUser.name, | |||
lastName: fUser.name, | |||
email: fUser.email, | |||
country: fUser.location.name, | |||
country: (fUser.hasOwnProperty('location')) ? fUser.location.name : '', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Le pondria 'unknown', para que se entienda si nos encontramos con el country vacio en el futuro. Seguro que esto mismo no puede pasar con todos los otros datos que pedimos al graph?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Revise y el test user de la api de facebook no esta devolviendo el mail solamente.
Salvo la ubicación el resto de los campos deberían llegar siempre como respuesta al request. De todas formas se podría agregar un valor default a los campos que no sean obligatorios (por si la información no llega a estar).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Segun la doc todos son obligatorios, pero si el usuario en facebook no dio su pais, calculo que tambien podria no haber dado su fecha de nacimiento, no? Habria que llenar todos esos con un valor por default.
Otra, si el test user no te devuelve mail no deberia romper? No estaria cumpliendo con el schema de alta de usuario
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ahora mismo no se hace ningún chequeo del user que devuelve Facebook. Puedo agregarlo aca pero se romperían los tests de Facebook hasta que resuelva como hacer para que el test user devuelva los campos que están faltando.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No se como funcionan esos test users pero, de este lado, no podemos poner un default si fb no te puede proveer ese dato? Y esto aplicaria a todos los datos, no solo pais
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si, podriamos chequear contra un schema para corroborar que tenga los datos que determinemos como obligatorios y despues revisar el resto y en el caso de que no esten ponerles el valor default que corresponda.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implementado en 5416dbf
}); | ||
}); | ||
|
||
it('should return the expected body response when correct credentials are sent', (done) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Estos dos tests felices de fb caen en la alta de un nuevo usuario, no? Se puede agregar el pedido de un token por fb de un usuario que ya exista?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implementado en 98a57bf
Test login when using facebook token of an existing user in the database
Los tests fallaron porque los tokens caducaron. Pense que no vencían los de los test user, tengo que averiguar como hacer para que no expiren. |
* Generate user for db in specific function. * Update tokens
* Make username lowercase * Set last name as last element in array of names
src/middlewares/facebook.js
Outdated
userName, | ||
facebookUserId: user.id, | ||
facebookAuthToken: user.authToken, | ||
birthdate: user.birthday, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
El cumpleaños va a venir siempre si o si? No puede pasar que alguno no lo complete?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
En teoría la aplicación pide ese permiso (que por default no viene) y cuando te creas una cuenta en Facebook lo tenes que definir si o si.
Mas que nada por eso lo agregue, como lo pedimos y es obligatorio especificarlo en Facebook debería estar siempre este campo.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No veo la diferencia de cumpleaños con los otros campos, todos son obligatorios, mail es mas vital que cumpleaños y lo estamos dejando pasar como unknown por ejemplo
src/middlewares/facebook.js
Outdated
logger.warn(`FB GRAPH RESPONSE ${JSON.stringify(response)}`); | ||
reject(error); | ||
const errMsg = JSON.parse(response.body).error.message; | ||
logger.warn(`FB GRAPH RESPONSE ${errMsg}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Alindemos el mensaje del logger si se van a quedar estos prints 😁
src/middlewares/facebook.js
Outdated
respond.internalServerError(error, res); | ||
}); | ||
fUser.authToken = req.body.authToken; | ||
db.general.createNewEntry(tables.users, createDbUserObject(fUser)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yo meteria estas dos lineas en la función auxiliar también, que sea un "createFacebookUser" y listo
.then(fUser => facebook.handleLogin(req, res, next, fUser)) | ||
.catch(error => respond.internalServerError(error, res)); | ||
.then(fUser => { | ||
respond.validateRequestBody(fUser, facebookUser) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Por que validamos que venga si o si con cumpleaños aca pero los demas campos los dejamos como potenciales unknown?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pd hay que cambiarle el nombre a esta funcion y sacarla de respond, ya no es un validateRequestBody ni pertenece al handler
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Por que validamos que venga si o si con cumpleaños aca pero los demas campos los dejamos como potenciales unknown?
En realidad deberían ser obligatorios también los campos first_name
, last_name
y email
porque los pedimos y son obligatorios para crear una cuenta en Facebook (al igual que el cumpleaños). Mi idea es cambiarlo en cuanto logre que los test users den esta informacion (o actualice los test cases para usar un usuario real que si los da).
pd hay que cambiarle el nombre a esta funcion y sacarla de respond, ya no es un validateRequestBody ni pertenece al handler
Sip, pero abriría un issue y lo cambiaría en una branch nueva. Este cambio impacta en muchos archivos y se desvirtúa este PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
En realidad deberían ser obligatorios también los campos first_name, last_name y email porque los pedimos y son obligatorios para crear una cuenta en Facebook (al igual que el cumpleaños). Mi idea es cambiarlo en cuanto logre que los test users den esta informacion (o actualice los test cases para usar un usuario real que si los da).
De nuevo, no se como funcionan los test users, pero si no se les puede setear los datos que queremos que devuelvan decime como y te doy un token de mi cuenta.
Hay otra cosa igual, si un test user de facebook puede no tener esos campos, no significa que cualquier user podria no tenerlos y hay que contemplar que hacemos ahi? O los ponemos todos en el schema, y si no tiene alguno lo mandamos a completar su perfil de fb, o dejamos pasar a todos como unknown.
Sip, pero abriría un issue y lo cambiaría en una branch nueva. Este cambio impacta en muchos archivos y se desvirtúa este PR.
Abrilo, mi miedo es que se quede como un minor olvidado hasta el final 😣
src/middlewares/facebook.js
Outdated
const createDbUserObject = (user) => { | ||
const names = user.name.split(' '); | ||
const defaultMissingValue = 'unknown'; | ||
const userName = names.join('_').toLowerCase(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Guarda con #52 despues de esto, los nombres de fb no son unicos
* Encapsulate facebook user creation in it's own function * Update tokens
* Change tokens for ones that comply with new mandatory attributes. * Only use default value with country
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Abrir el issue del wrapper de amanda y mergear 🎉
Closes #98