Skip to content
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

Merged
merged 12 commits into from
May 3, 2017
Merged

Add facebook login tests #101

merged 12 commits into from
May 3, 2017

Conversation

miporto
Copy link
Member

@miporto miporto commented May 3, 2017

Closes #98

@codecov
Copy link

codecov bot commented May 3, 2017

Codecov Report

Merging #101 into fb-integration will increase coverage by 4.97%.
The diff coverage is 90.47%.

Impacted file tree graph

@@                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
Impacted Files Coverage Δ
src/database/migrations/migrations.js 100% <100%> (ø) ⬆️
src/middlewares/login-router.js 92.85% <80%> (+12.85%) ⬆️
src/middlewares/facebook.js 97.14% <93.33%> (+60.1%) ⬆️
src/handlers/response.js 92.13% <0%> (+3.37%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 910ef5f...a06d13f. Read the comment docs.

@miporto miporto changed the base branch from develop to fb-integration May 3, 2017 04:42
@miporto miporto requested a review from aibarbetta May 3, 2017 04:46
@@ -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 : '',
Copy link
Member

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?

Copy link
Member Author

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).

Copy link
Member

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

Copy link
Member Author

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.

Copy link
Member

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

Copy link
Member Author

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.

Copy link
Member Author

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) => {
Copy link
Member

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?

Copy link
Member Author

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
@miporto
Copy link
Member Author

miporto commented May 3, 2017

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
userName,
facebookUserId: user.id,
facebookAuthToken: user.authToken,
birthdate: user.birthday,
Copy link
Member

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?

Copy link
Member Author

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.

Copy link
Member

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

logger.warn(`FB GRAPH RESPONSE ${JSON.stringify(response)}`);
reject(error);
const errMsg = JSON.parse(response.body).error.message;
logger.warn(`FB GRAPH RESPONSE ${errMsg}`);
Copy link
Member

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 😁

respond.internalServerError(error, res);
});
fUser.authToken = req.body.authToken;
db.general.createNewEntry(tables.users, createDbUserObject(fUser))
Copy link
Member

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)
Copy link
Member

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?

Copy link
Member

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

Copy link
Member Author

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.

Copy link
Member

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 😣

const createDbUserObject = (user) => {
const names = user.name.split(' ');
const defaultMissingValue = 'unknown';
const userName = names.join('_').toLowerCase();
Copy link
Member

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
Copy link
Member

@aibarbetta aibarbetta left a 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 🎉

@miporto miporto merged commit 6e99c15 into fb-integration May 3, 2017
@miporto miporto deleted the SS-98 branch May 3, 2017 17:48
@miporto miporto mentioned this pull request May 4, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants