Skip to content

Commit b778cea

Browse files
committed
feat: allow to set another transport as primary
1 parent 0c8688b commit b778cea

File tree

2 files changed

+46
-14
lines changed

2 files changed

+46
-14
lines changed

deltachat-rpc-client/tests/test_multitransport.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from deltachat_rpc_client.rpc import JsonRpcError
44

5+
56
def test_add_second_address(acfactory) -> None:
67
account = acfactory.new_configured_account()
78
assert len(account.list_transports()) == 1
@@ -22,3 +23,34 @@ def test_add_second_address(acfactory) -> None:
2223

2324
account.delete_transport(second_addr)
2425
assert len(account.list_transports()) == 2
26+
27+
28+
def test_change_address(acfactory) -> None:
29+
"""Test Alice configuring a second transport and setting it as a primary one."""
30+
alice, bob = acfactory.get_online_accounts(2)
31+
32+
bob.create_chat(alice)
33+
34+
alice_chat_bob = alice.create_chat(bob)
35+
alice_chat_bob.send_text("Hello!")
36+
37+
msg1 = bob.wait_for_incoming_msg().get_snapshot()
38+
sender_addr1 = msg1.sender.get_snapshot().address
39+
40+
alice.stop_io()
41+
old_alice_addr = alice.get_config("configured_addr")
42+
qr = acfactory.get_account_qr()
43+
alice.add_transport_from_qr(qr)
44+
new_alice_addr = alice.list_transports()[1]["addr"]
45+
alice.set_config("configured_addr", new_alice_addr)
46+
alice.start_io()
47+
48+
alice_chat_bob.send_text("Hello again!")
49+
50+
msg2 = bob.wait_for_incoming_msg().get_snapshot()
51+
sender_addr2 = msg2.sender.get_snapshot().address
52+
53+
assert msg1.sender == msg2.sender
54+
assert sender_addr1 != sender_addr2
55+
assert sender_addr1 == old_alice_addr
56+
assert sender_addr2 == new_alice_addr

src/config.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::env;
44
use std::path::Path;
55
use std::str::FromStr;
66

7-
use anyhow::{Context as _, Result, bail, ensure};
7+
use anyhow::{Context as _, Result, ensure};
88
use base64::Engine as _;
99
use deltachat_contact_tools::{addr_cmp, sanitize_single_line};
1010
use serde::{Deserialize, Serialize};
@@ -791,20 +791,20 @@ impl Context {
791791
.await?;
792792
}
793793
Config::ConfiguredAddr => {
794-
if self.is_configured().await? {
795-
bail!("Cannot change ConfiguredAddr");
796-
}
797-
if let Some(addr) = value {
798-
info!(
799-
self,
800-
"Creating a pseudo configured account which will not be able to send or receive messages. Only meant for tests!"
801-
);
802-
ConfiguredLoginParam::from_json(&format!(
803-
r#"{{"addr":"{addr}","imap":[],"imap_user":"","imap_password":"","smtp":[],"smtp_user":"","smtp_password":"","certificate_checks":"Automatic","oauth2":false}}"#
804-
))?
805-
.save_to_transports_table(self, &EnteredLoginParam::default())
806-
.await?;
794+
if !self.is_configured().await? {
795+
if let Some(addr) = value {
796+
info!(
797+
self,
798+
"Creating a pseudo configured account which will not be able to send or receive messages. Only meant for tests!"
799+
);
800+
ConfiguredLoginParam::from_json(&format!(
801+
r#"{{"addr":"{addr}","imap":[],"imap_user":"","imap_password":"","smtp":[],"smtp_user":"","smtp_password":"","certificate_checks":"Automatic","oauth2":false}}"#
802+
))?
803+
.save_to_transports_table(self, &EnteredLoginParam::default())
804+
.await?;
805+
}
807806
}
807+
self.sql.set_raw_config(key.as_ref(), value).await?;
808808
}
809809
_ => {
810810
self.sql.set_raw_config(key.as_ref(), value).await?;

0 commit comments

Comments
 (0)