M module-db/Interface/ContactRecord.cpp => module-db/Interface/ContactRecord.cpp +5 -5
@@ 170,7 170,7 @@ auto ContactRecordInterface::Update(const ContactRecord &rec) -> bool
bool ret = false;
bool recordExists = [&]() {
auto record = contactDB->contacts.getById(contact.ID);
- return record.ID != DB_ID_NONE;
+ return record.isValid();
}();
if (recordExists) {
ret = contactDB->contacts.update(row);
@@ 651,10 651,13 @@ auto ContactRecordInterface::splitNumberIDs(const std::string &numberIDs) -> con
auto ContactRecordInterface::joinNumberIDs(const std::vector<std::uint32_t> &numberIDs) -> std::string
{
+ if (numberIDs.empty()) {
+ return {};
+ }
+
std::ostringstream outStream;
std::ostream_iterator<std::uint32_t> outIterator(outStream, " ");
std::copy(std::begin(numberIDs), std::end(numberIDs), outIterator);
-
return outStream.str();
}
@@ 678,9 681,6 @@ auto ContactRecordInterface::unbindNumber(std::uint32_t contactId, std::uint32_t
// unbind number from contact
auto numberIDs = splitNumberIDs(contactRecord.numbersID);
numberIDs.erase(std::remove(std::begin(numberIDs), std::end(numberIDs), numberId), std::end(numberIDs));
- if (numberIDs.empty()) {
- return contactDB->contacts.removeById(contactId);
- }
contactRecord.numbersID = joinNumberIDs(numberIDs);
return contactDB->contacts.update(contactRecord);
}
M module-db/tests/ContactsRecord_tests.cpp => module-db/tests/ContactsRecord_tests.cpp +11 -7
@@ 380,20 380,24 @@ TEST_CASE("Contact record numbers update")
REQUIRE(contactDB.number.count() == 4);
auto validationRecord = records.GetByIdWithTemporary(1);
- REQUIRE(validationRecord.ID == DB_ID_NONE);
+ REQUIRE(validationRecord.ID != DB_ID_NONE);
+ REQUIRE(validationRecord.numbers[0].number.getEntered() == numbers[2]);
+ REQUIRE(validationRecord.numbers[1].number.getEntered() == numbers[3]);
validationRecord = records.GetByIdWithTemporary(2);
REQUIRE(validationRecord.ID != DB_ID_NONE);
- REQUIRE(validationRecord.numbers[0].number.getEntered() == numbers[0]);
+ // numbers[3] was previously assigned to it, but it's re-assigned to recordID=2 above.
+ REQUIRE(validationRecord.numbers.empty());
+ // A temporary contact for number[0] (which was previously assigned to recordID=1) has been created.
validationRecord = records.GetByIdWithTemporary(3);
REQUIRE(validationRecord.ID != DB_ID_NONE);
- REQUIRE(validationRecord.numbers[0].number.getEntered() == numbers[1]);
+ REQUIRE(validationRecord.numbers[0].number.getEntered() == numbers[0]);
- validationRecord = records.GetByID(4);
- REQUIRE(validationRecord.numbers.size() == 2);
- REQUIRE(validationRecord.numbers[0].number.getEntered() == numbers[2]);
- REQUIRE(validationRecord.numbers[1].number.getEntered() == numbers[3]);
+ // A temporary contact for number[1] (which was previously assigned to recordID=1) has been created.
+ validationRecord = records.GetByIdWithTemporary(4);
+ REQUIRE(validationRecord.ID != DB_ID_NONE);
+ REQUIRE(validationRecord.numbers[0].number.getEntered() == numbers[1]);
}
Database::deinitialize();