Skip to content

Conversation

@echatzo
Copy link
Contributor

@echatzo echatzo commented Oct 13, 2025

No description provided.

@pschaus
Copy link
Owner

pschaus commented Oct 13, 2025

Il faudrait passer tous les comments en anglais.
Dans l'entête, il faut expliquer aux étudiants ce qu'ils doivent implémenter dans la classe.
Il ne faut pas de System.out.println dans les actions subscribe, etc de ton code. Pas de side effect silencieux.
Pas de "instance of", c'est un mauvais design si tu as besoin de ça.

@echatzo
Copy link
Contributor Author

echatzo commented Oct 14, 2025

Tout a été traduit en anglais, j'ai ajouté une nouvelle classe message pour gérer les messages sans print et un log par user sous forme de ArrayList.

Il n'y a plus de instance of

Ce qu'il faut implémenter a été davantage détaillé

@pschaus
Copy link
Owner

pschaus commented Oct 14, 2025

C'est toujours pas OK Edouard, l'API n'est pas bonne.

Il y a une mauvaise utilisation des classes internes (statiques alors qu'elles ne devraient pas par exemple).

Le ChatMessage doit juste contenir le message. Le reste se fait avec les appels à des méthodes.
On fait de l'OO objet ici, pas une API rest. Tout doit être statiquement typé et compile safe.

    ChatApp.ChatRoom room = new ChatApp.ChatRoom("general");
    ChatApp.ChatUser alice = new ChatApp.ChatUser("Alice");
    ChatApp.ChatUser bob = new ChatApp.ChatUser("Bob");
    ChatApp.ChatUser john = new ChatApp.ChatUser("John");

    // Subscriptions
    room.subscribe(alice);
    room.subscribe(bob);

    // Alice sends message
    ChatApp.ChatMessage msg = new ChatApp.ChatMessage("post", "general", "Alice", "Salut tout le monde !");
    alice.sendMessage(room, msg);

    List<ChatApp.ChatMessage> aliceLog = alice.getLog();
    List<ChatApp.ChatMessage> bobLog = bob.getLog();
    List<ChatApp.ChatMessage> johnLog = john.getLog();

    // Subscription logs: check type and user fields
    assertTrue(aliceLog.stream().anyMatch(m -> m.getType().equals("join") && m.getUser().equals("Alice")));
    assertTrue(bobLog.stream().anyMatch(m -> m.getType().equals("join") && m.getUser().equals("Bob")));

    // Alice's post should be logged
    assertTrue(aliceLog.stream().anyMatch(m ->
            m.getType().equals("post") && m.getUser().equals("Alice") &&
                    m.getChannel().equals("general") &&
                    m.getContent().contains("Salut tout le monde !")));

    // Bob should have received the message
    assertTrue(bobLog.stream().anyMatch(m ->
            m.getType().equals("receive") && m.getUser().equals("Alice") &&
                    m.getChannel().equals("general") &&
                    m.getContent().contains("Salut tout le monde !")));

    // John should have empty log
    assertTrue(johnLog.isEmpty());

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