Skip to content
This repository was archived by the owner on Jun 3, 2025. It is now read-only.

Commit a684873

Browse files
author
Irene
committed
Fix saving configurations to accountList on changes
1 parent e20d3f9 commit a684873

6 files changed

Lines changed: 55 additions & 4 deletions

File tree

src/main/java/fi/helsinki/cs/tmc/cli/backend/SettingsIo.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import java.nio.file.Path;
1414
import java.nio.file.Paths;
1515
import java.util.HashMap;
16+
import java.util.HashSet;
17+
import java.util.Iterator;
18+
import java.util.Set;
1619

1720
/**
1821
* Reads and writes to config files on the system.
@@ -67,6 +70,24 @@ public static boolean delete() {
6770
return true;
6871
}
6972

73+
public static void saveCurrentSettingsToAccountList(Settings settings) {
74+
AccountList list = loadAccountList();
75+
Set<Account> deletables = new HashSet<>();
76+
for (Iterator<Account> i = list.iterator(); i.hasNext(); ) {
77+
Account account = i.next();
78+
if (account.getUsername().equals(settings.getAccount().getUsername())) {
79+
if (!account.getUsername().isPresent()) {
80+
logger.error("Saveable account doesn't exist");
81+
return;
82+
}
83+
deletables.add(account);
84+
}
85+
}
86+
deletables.stream().forEach(d -> list.deleteAccount(d.getUsername().get(), d.getServerAddress()));
87+
list.addAccount(settings.getAccount());
88+
saveAccountList(list);
89+
}
90+
7091
public static HashMap<String, String> loadProperties() {
7192
return loadPropertiesFrom(getConfigDirectory());
7293
}

src/main/java/fi/helsinki/cs/tmc/cli/command/ConfigCommand.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fi.helsinki.cs.tmc.cli.command;
22

3+
import fi.helsinki.cs.tmc.cli.backend.SettingsIo;
34
import fi.helsinki.cs.tmc.cli.core.AbstractCommand;
45
import fi.helsinki.cs.tmc.cli.core.CliContext;
56
import fi.helsinki.cs.tmc.cli.core.Command;
@@ -46,6 +47,7 @@ private void configureAllowedKeys() {
4647
}
4748
boolean send = Boolean.parseBoolean(newVal);
4849
context.getSettings().setSendDiagnostics(send);
50+
SettingsIo.saveCurrentSettingsToAccountList(context.getSettings());
4951
});
5052

5153
ALLOWED_KEYS.put("server-address", (key, address) -> {
@@ -54,6 +56,7 @@ private void configureAllowedKeys() {
5456
throw new BadValueTypeException("Please start the address with http[s]://");
5557
}
5658
context.getSettings().setServerAddress(addr);
59+
SettingsIo.saveCurrentSettingsToAccountList(context.getSettings());
5760
});
5861

5962
ALLOWED_KEYS.put("update-date", (key, value) -> {
@@ -229,6 +232,7 @@ private void setPropertiesQuietly(String[] arguments) {
229232
private boolean saveValue(String key, String value) {
230233
try {
231234
ALLOWED_KEYS.get(key).apply(key, value);
235+
232236
} catch (Exception e) {
233237
io.errorln(e.getMessage());
234238
return false;
@@ -252,5 +256,6 @@ private void addToProperties(String key, Object value) throws BadValueTypeExcept
252256
throw new BadValueTypeException("Color " + value + " not supported.");
253257
}
254258
properties.put(key, color);
259+
SettingsIo.saveProperties(properties);
255260
}
256261
}

src/main/java/fi/helsinki/cs/tmc/cli/command/LoginCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ private boolean getSendDiagnosticsAnswer(String username, String server) {
128128
} else if (sendDiagnostics.trim().toLowerCase().startsWith("n")) {
129129
return false;
130130
}
131-
io.println("Please answer y or n.");
131+
io.println("Please answer y(es) or n(o).");
132132
}
133133
}
134134
}

src/main/java/fi/helsinki/cs/tmc/cli/command/OrganizationCommand.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package fi.helsinki.cs.tmc.cli.command;
22

33
import fi.helsinki.cs.tmc.cli.backend.Account;
4+
import fi.helsinki.cs.tmc.cli.backend.Settings;
5+
import fi.helsinki.cs.tmc.cli.backend.SettingsIo;
46
import fi.helsinki.cs.tmc.cli.backend.TmcUtil;
57
import fi.helsinki.cs.tmc.cli.core.AbstractCommand;
68
import fi.helsinki.cs.tmc.cli.core.CliContext;
@@ -31,9 +33,8 @@ public void getOptions(Options options) {
3133
@Override
3234
public void run(CliContext ctx, CommandLine args) {
3335
Optional<Organization> organization = chooseOrganization(ctx, args);
34-
Account currentAccount = this.ctx.getSettings().getAccount();
35-
currentAccount.setOrganization(organization);
36-
this.ctx.getSettings().setAccount(currentAccount);
36+
this.ctx.getSettings().setOrganization(organization);
37+
SettingsIo.saveCurrentSettingsToAccountList(this.ctx.getSettings());
3738
}
3839

3940
private List<Organization> listOrganizations() {

src/test/java/fi/helsinki/cs/tmc/cli/backend/SettingsIoTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
public class SettingsIoTest {
1919

20+
public static final String STUB_SERVER = "stubServer";
2021
private AccountList accountList;
2122
private Account account;
2223
private Path tempDir;
@@ -119,4 +120,17 @@ public void loadingPropertiesWorks() {
119120
HashMap<String, String> loadedProps = SettingsIo.loadPropertiesFrom(tempDir);
120121
assertEquals(props, loadedProps);
121122
}
123+
124+
@Test
125+
public void saveCurrentSettingsOverridesOldAccountWithSameUsername() {
126+
AccountList oldList = new AccountList();
127+
Account acc = new Account("username", "password", new Organization("old", "", "", "", false));
128+
acc.setServerAddress(STUB_SERVER);
129+
oldList.addAccount(acc);
130+
Settings settings = new Settings("username", "password", new Organization("new", "", "", "", false));
131+
settings.setServerAddress(STUB_SERVER);
132+
SettingsIo.saveCurrentSettingsToAccountList(settings);
133+
AccountList newList = SettingsIo.loadAccountList();
134+
assertEquals("new", newList.getAccount("username", STUB_SERVER).getOrganization().get().getName());
135+
}
122136
}

src/test/java/fi/helsinki/cs/tmc/cli/command/OrganizationCommandTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.mockito.Mockito.spy;
2727
import static org.mockito.Mockito.when;
2828
import static org.powermock.api.mockito.PowerMockito.mockStatic;
29+
import static org.powermock.api.mockito.PowerMockito.verifyStatic;
2930

3031
@RunWith(PowerMockRunner.class)
3132
@PrepareForTest({SettingsIo.class, TmcUtil.class})
@@ -118,4 +119,13 @@ public void printsAllOrganizationsIfInvalidSlugGivenAsArgumentToOneLiner() {
118119
app.run(args);
119120
io.assertContains(TEST_ORGANIZATION.getName());
120121
}
122+
123+
@Test
124+
public void saveConfigruationsToAccountList() {
125+
when(TmcUtil.getOrganizationsFromServer(any(CliContext.class))).thenReturn(organizationList);
126+
String[] args = {"organization", "-o", TEST_ORGANIZATION.getSlug()};
127+
app.run(args);
128+
verifyStatic();
129+
SettingsIo.saveCurrentSettingsToAccountList(eq(settings));
130+
}
121131
}

0 commit comments

Comments
 (0)