Salta el contingut
 

Exercici: Proves de PasswordStrengthChecker

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Proves de mètodes estàtics

Aquest exercici consisteix a implementar les proves unitàries de la classe PasswordStrengthChecker utilitzant diferents branques de Git.

PasswordStrengthChecker: comprovació d'una contrasenya segura

ud4.methods

La classe PasswordStrengthChecker proporciona el mètode estàtic isPasswordStrong(password), que indica si una contrasenya és forta segons els criteris següents:

  • La longitud mínima de la contrasenya és de 8 caràcters.
  • Conté majúscules, minúscules i símbols.

El mètode retorna un valor de l'enumeració PasswordStrength:

  • INVALID: la contrasenya no compleix els requisits de longitud.
  • WEAK: la contrasenya només conté caràcters d'un tipus.
  • MEDIUM: la contrasenya combina caràcters de dos tipus diferents.
  • STRONG: la contrasenya combina tots els tipus de caràcters.
PasswordStrengthChecker.java
package ud4.methods;

public class PasswordStrengthChecker
{
    public enum PasswordStrength {
        INVALID,
        WEAK,
        MEDIUM,
        STRONG
    }

    public static PasswordStrength checkStrength(String password) {
        if (password == null || password.length() < 8) {
            return PasswordStrength.INVALID;
        }

        boolean hasLowercase = password.matches(".*[a-z].*");
        boolean hasUppercase = password.matches(".*[A-Z].*");
        boolean hasSymbol = password.matches(".*[^a-zA-Z0-9].*");

        int typeCount = 0;
        if (hasLowercase) typeCount++;
        if (hasUppercase) typeCount++;
        if (hasSymbol) typeCount++;

        return switch (typeCount) {
            case 1 -> PasswordStrength.WEAK;
            case 2 -> PasswordStrength.MEDIUM;
            case 3 -> PasswordStrength.STRONG;
            default -> PasswordStrength.INVALID;
        };
    }
}

Proves unitàries

Implementa les proves unitàries del mètode isPasswordStrong(password) tenint en compte les consideracions següents:

  • Utilitza classes @Nested per agrupar les proves segons la fortalesa de la contrasenya.
  • Utilitza l'anotació @DisplayName per donar un nom significatiu a cada classe i prova.

Branques en Git

Les proves s'implementaran de manera independent en diferents branques de Git. Després, tots els canvis s'incorporaran a la branca principal mantenint una història lineal.

No esborres les branques remotes després d'integrar-les.

En un projecte real, sí que s'esborrarien per mantindre una història neta. No obstant això, vull revisar que has creat les branques correctament.

Passos

Per fer aquesta tasca, segueix els passos següents:

  1. Crea la branca p2/backup des de main, per poder tornar enrere si cal.
  2. Crea la branca p2/source-code des de main i fes-hi un commit per afegir el fitxer PasswordStrengthChecker i el fitxer de proves PasswordStrengthCheckerTest.
  3. Incorpora els canvis de p2/source-code a main mitjançant una fusió directa (fast-forward).
  4. Crea les branques p2/test-invalid, p2/test-weak, p2/test-medium i p2/test-strong.
  5. Implementa en cada branca les proves unitàries corresponents.
  6. Una vegada acabades totes les branques, publica-les en el repositori remot.
  7. Incorpora les branques a main mantenint una història lineal.

    No tornes a publicar cada branca en el repositori remot.

  8. Publica els canvis de la branca main.

Estat final

L'estat final del repositori hauria de ser semblant a aquest:

jpuigcerver@fp:~/IdeaProjects/PuigcerverJoan-ED (main) $ git lga
* cf99622 - (56 minutes ago) P2: Strong testcases - Joan Puigcerver Ibáñez (HEAD -> main, origin/main, p2/test-strong)
* 316c12c - (58 minutes ago) P2: Medium testcases - Joan Puigcerver Ibáñez (p2/test-medium)
* 66869de - (63 minutes ago) P2: Weak testcases - Joan Puigcerver Ibáñez (p2/test-weak)
* 17af219 - (66 minutes ago) P2: Invalid testcases - Joan Puigcerver Ibáñez (origin/p2/test-invalid, p2/test-invalid)
| * 307aefd - (56 minutes ago) P2: Strong testcases - Joan Puigcerver Ibáñez (origin/p2/test-strong)
|/
| * 6a59849 - (58 minutes ago) P2: Medium testcases - Joan Puigcerver Ibáñez (origin/p2/test-medium)
|/
| * c9ced50 - (63 minutes ago) P2: Weak testcases - Joan Puigcerver Ibáñez (origin/p2/test-weak)
|/
* 0eb6b74 - (82 minutes ago) p2: source code - Joan Puigcerver Ibáñez (origin/p2/source-code, p2/source-code)
* b9965f1 - (6 days ago) Últim commit abans de l'exercici - Joan Puigcerver Ibáñez (origin/p2/backup, p2/backup)

Tornar a començar

Per tornar a l'estat inicial, fes les accions següents:

  1. Situa't en la branca principal:

    git checkout main
    
  2. Elimina les branques locals de l'exercici:

    git branch -D <branca>
    

    No elimines la branca main o master.

    Exemple: Eliminar les branques locals

    S'eliminen les cinc branques locals de l'exercici:

    $ git branch -D p2/source-code
    $ git branch -D p2/test-invalid
    $ git branch -D p2/test-weak
    $ git branch -D p2/test-medium
    $ git branch -D p2/test-strong
    
  3. Elimina les branques remotes:

    git push -d origin <branca>
    
    Exemple: Eliminar les branques remotes

    S'eliminen les cinc branques remotes de l'exercici:

    $ git push -d origin p2/source-code
    $ git push -d origin p2/test-invalid
    $ git push -d origin p2/test-weak
    $ git push -d origin p2/test-medium
    $ git push -d origin p2/test-strong
    
  4. Mou la branca principal a l'inici de l'exercici: mou la referència de la branca main a la posició de la branca p2/backup.

    git reset --hard <referència>
    
    Exemple: Moure la branca main a la posició de p2/backup

    Es mou la branca main al punt de partida de l'exercici:

    $ git reset --hard p2/backup
    
  5. Mou la branca remota: després d'haver mogut la branca local, mou la branca remota a la mateixa posició.

    git push -f
    
    Exemple: Actualitzar la branca remota origin/main

    Es mou la branca remota origin/main a la mateixa posició que la branca local main:

    $ git checkout main
    $ git push -f
    
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.