From 68314d35407443236a8384bd0d2d36ac9151bd1f Mon Sep 17 00:00:00 2001 From: Matt Czech Date: Thu, 30 Jan 2025 09:43:17 -0600 Subject: [PATCH] PM-17627: Reset send expiration to deletion date on edit (#1309) --- .../AddEditSendItemState.swift | 9 ++++--- .../AddEditSendItemStateTests.swift | 27 ++++++++++++------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/BitwardenShared/UI/Tools/Send/SendItem/AddEditSendItem/AddEditSendItemState.swift b/BitwardenShared/UI/Tools/Send/SendItem/AddEditSendItem/AddEditSendItemState.swift index 2a08d858a..ddcc89d57 100644 --- a/BitwardenShared/UI/Tools/Send/SendItem/AddEditSendItem/AddEditSendItemState.swift +++ b/BitwardenShared/UI/Tools/Send/SendItem/AddEditSendItem/AddEditSendItemState.swift @@ -170,7 +170,8 @@ extension AddEditSendItemState { /// Returns a `SendView` based on the properties of the `AddEditSendItemState`. /// func newSendView() -> SendView { - SendView( + let deletionDate = deletionDate.calculateDate() ?? Date() + return SendView( id: id, accessId: accessId, name: name, @@ -186,8 +187,10 @@ extension AddEditSendItemState { disabled: isDeactivateThisSendOn, hideEmail: isHideMyEmailOn, revisionDate: Date(), - deletionDate: deletionDate.calculateDate() ?? Date(), - expirationDate: expirationDate + deletionDate: deletionDate, + // If the send has an expiration date, reset it to the deletion date to prevent a server + // error which disallows editing a send after it has expired. + expirationDate: expirationDate != nil ? deletionDate : nil ) } diff --git a/BitwardenShared/UI/Tools/Send/SendItem/AddEditSendItem/AddEditSendItemStateTests.swift b/BitwardenShared/UI/Tools/Send/SendItem/AddEditSendItem/AddEditSendItemStateTests.swift index 7aac6e6c1..2ddfc1c03 100644 --- a/BitwardenShared/UI/Tools/Send/SendItem/AddEditSendItem/AddEditSendItemStateTests.swift +++ b/BitwardenShared/UI/Tools/Send/SendItem/AddEditSendItem/AddEditSendItemStateTests.swift @@ -75,7 +75,22 @@ class AddEditSendItemStateTests: BitwardenTestCase { XCTAssertEqual(sendView.expirationDate, nil) } + /// `newSendView()` sets the expiration date to the deletion date if the expiration date isn't + /// `nil` to allow editing an expired send. + func test_newSendView_text_expired() { + let deletionDate = Date(year: 2024, month: 1, day: 2) + let subject = AddEditSendItemState( + customDeletionDate: deletionDate, + deletionDate: .custom(deletionDate), + expirationDate: .distantPast + ) + let sendView = subject.newSendView() + XCTAssertEqual(sendView.deletionDate, deletionDate) + XCTAssertEqual(sendView.expirationDate, deletionDate) + } + func init_sendView_text() { + let deletionDate = Date(year: 2023, month: 11, day: 5, hour: 9, minute: 41, second: 11) let sendView = SendView.fixture( id: "ID", accessId: "ACCESS_ID", @@ -92,7 +107,7 @@ class AddEditSendItemStateTests: BitwardenTestCase { disabled: false, hideEmail: false, revisionDate: Date(year: 2023, month: 11, day: 5, hour: 9, minute: 41, second: 0), - deletionDate: Date(year: 2023, month: 11, day: 5, hour: 9, minute: 41, second: 11), + deletionDate: deletionDate, expirationDate: Date(year: 2023, month: 11, day: 5, hour: 9, minute: 41, second: 22) ) let subject = AddEditSendItemState(sendView: sendView, hasPremium: true) @@ -113,14 +128,8 @@ class AddEditSendItemStateTests: BitwardenTestCase { XCTAssertEqual(subject.currentAccessCount, 42) XCTAssertEqual(subject.isDeactivateThisSendOn, false) XCTAssertEqual(subject.isHideMyEmailOn, false) - XCTAssertEqual( - subject.customDeletionDate, - Date(year: 2023, month: 11, day: 5, hour: 9, minute: 41, second: 11) - ) - XCTAssertEqual( - subject.expirationDate, - Date(year: 2023, month: 11, day: 5, hour: 9, minute: 41, second: 22) - ) + XCTAssertEqual(subject.customDeletionDate, deletionDate) + XCTAssertEqual(subject.expirationDate, deletionDate) } func init_sendView_file() {