Skip to content

Commit 2ad08a6

Browse files
author
Rafał Chabowski
committed
Make Tx status transitions in tests more explicit
1 parent 12ff0a5 commit 2ad08a6

File tree

1 file changed

+34
-24
lines changed
  • crates/fuel-core/src/query/subscriptions

1 file changed

+34
-24
lines changed

crates/fuel-core/src/query/subscriptions/test.rs

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,20 @@ fn squeezed_during_block_production() -> TransactionStatus {
8383
/// Final indicates that the transaction has reached one of the final statuses (Success, Squeezed, or Failed).
8484
#[derive(Debug, Clone, PartialEq, Eq, Arbitrary)]
8585
enum TxStatus {
86-
/// The transaction has been submitted
87-
Submitted,
88-
/// The transaction has been preconfirmed, but the final status could still be different
89-
Preconfirmed,
86+
/// The transaction has not reached a final status
87+
NotFinal(NotFinalTxStatus),
9088
/// The transaction has reached a final status
9189
Final(FinalTxStatus),
9290
}
9391

92+
/// Struct representing a submitted transaction.
93+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Arbitrary)]
94+
enum NotFinalTxStatus {
95+
Submitted,
96+
PreconfirmationSuccess,
97+
PreconfirmationFailure,
98+
}
99+
94100
/// Represents the final transaction statuses (Success, Squeezed, Failed).
95101
#[derive(Debug, Clone, PartialEq, Eq, Arbitrary)]
96102
enum FinalTxStatus {
@@ -99,6 +105,8 @@ enum FinalTxStatus {
99105
/// The transaction was squeezed out of the txpool (or block)
100106
/// because it was not valid to include in the block.
101107
Squeezed,
108+
/// The transaction was squeezed out during block production.
109+
PreconfirmationSqueeze,
102110
/// The transaction failed to execute and was included in a block.
103111
Failed,
104112
}
@@ -143,15 +151,8 @@ fn input_stream() -> impl Strategy<Value = Vec<TxStatusMessage>> {
143151
#[derive(Debug, Clone, Copy, PartialEq, Eq, Arbitrary)]
144152
struct Error;
145153

146-
/// Struct representing a submitted transaction.
147-
#[derive(Debug, Clone, Copy, PartialEq, Eq, Arbitrary)]
148-
enum NotFinal {
149-
Submitted,
150-
Preconfirmation,
151-
}
152-
153154
/// A model of the transaction status change functions control flow.
154-
type Flow = ControlFlow<FinalTxStatus, NotFinal>;
155+
type Flow = ControlFlow<FinalTxStatus, NotFinalTxStatus>;
155156

156157
/// The `transaction_status_change_model` function is a simplified version of the real
157158
/// `transaction_status_change` function. It takes an `Option` and an `Iterator` as input
@@ -181,8 +182,15 @@ fn transaction_status_change_model(
181182
// If the next state is "Continue" with "Submitted" status, push it to the output vector
182183
Flow::Continue(not_final_status) => {
183184
match not_final_status {
184-
NotFinal::Submitted => out.push(Ok(TxStatus::Submitted)),
185-
NotFinal::Preconfirmation => out.push(Ok(TxStatus::Preconfirmed)),
185+
NotFinalTxStatus::Submitted => {
186+
out.push(Ok(TxStatus::NotFinal(NotFinalTxStatus::Submitted)))
187+
}
188+
NotFinalTxStatus::PreconfirmationSuccess => out.push(Ok(
189+
TxStatus::NotFinal(NotFinalTxStatus::PreconfirmationSuccess),
190+
)),
191+
NotFinalTxStatus::PreconfirmationFailure => out.push(Ok(
192+
TxStatus::NotFinal(NotFinalTxStatus::PreconfirmationFailure),
193+
)),
186194
}
187195
ControlFlow::Continue(out)
188196
}
@@ -210,18 +218,20 @@ fn transaction_status_change_model(
210218
/// The flow continues only for `Submitted` status, otherwise it breaks with appropriate status.
211219
fn next_state(state: TransactionStatus) -> Flow {
212220
match state {
213-
TransactionStatus::Submitted { .. } => Flow::Continue(NotFinal::Submitted),
221+
TransactionStatus::Submitted { .. } => {
222+
Flow::Continue(NotFinalTxStatus::Submitted)
223+
}
214224
TransactionStatus::Success { .. } => Flow::Break(FinalTxStatus::Success),
215225
TransactionStatus::PreConfirmationSuccess { .. } => {
216-
Flow::Continue(NotFinal::Preconfirmation)
226+
Flow::Continue(NotFinalTxStatus::PreconfirmationSuccess)
217227
}
218228
TransactionStatus::Failure { .. } => Flow::Break(FinalTxStatus::Failed),
219229
TransactionStatus::PreConfirmationFailure { .. } => {
220-
Flow::Continue(NotFinal::Preconfirmation)
230+
Flow::Continue(NotFinalTxStatus::PreconfirmationFailure)
221231
}
222-
TransactionStatus::SqueezedOut { .. }
223-
| TransactionStatus::PreConfirmationSqueezedOut { .. } => {
224-
Flow::Break(FinalTxStatus::Squeezed)
232+
TransactionStatus::SqueezedOut { .. } => Flow::Break(FinalTxStatus::Squeezed),
233+
TransactionStatus::PreConfirmationSqueezedOut { .. } => {
234+
Flow::Break(FinalTxStatus::PreconfirmationSqueeze)
225235
}
226236
}
227237
}
@@ -283,25 +293,25 @@ impl From<crate::schema::tx::types::TransactionStatus> for TxStatus {
283293
fn from(status: crate::schema::tx::types::TransactionStatus) -> Self {
284294
match status {
285295
crate::schema::tx::types::TransactionStatus::Submitted(_) => {
286-
TxStatus::Submitted
296+
TxStatus::NotFinal(NotFinalTxStatus::Submitted)
287297
}
288298
crate::schema::tx::types::TransactionStatus::Success(_) => {
289299
TxStatus::Final(FinalTxStatus::Success)
290300
}
291301
crate::schema::tx::types::TransactionStatus::PreconfirmationSuccess(_) => {
292-
TxStatus::Preconfirmed
302+
TxStatus::NotFinal(NotFinalTxStatus::PreconfirmationSuccess)
293303
}
294304
crate::schema::tx::types::TransactionStatus::SqueezedOut(_) => {
295305
TxStatus::Final(FinalTxStatus::Squeezed)
296306
}
297307
crate::schema::tx::types::TransactionStatus::PreconfirmationSqueezedOut(
298308
_,
299-
) => TxStatus::Final(FinalTxStatus::Squeezed),
309+
) => TxStatus::Final(FinalTxStatus::PreconfirmationSqueeze),
300310
crate::schema::tx::types::TransactionStatus::Failure(_) => {
301311
TxStatus::Final(FinalTxStatus::Failed)
302312
}
303313
crate::schema::tx::types::TransactionStatus::PreconfirmationFailure(_) => {
304-
TxStatus::Preconfirmed
314+
TxStatus::NotFinal(NotFinalTxStatus::PreconfirmationFailure)
305315
}
306316
}
307317
}

0 commit comments

Comments
 (0)