From b8ec4a3a38357772ad4088208d6a0af20503709f Mon Sep 17 00:00:00 2001
From: Daniel Tartaglia <danielt1263@gmail.com>
Date: Sun, 13 Nov 2022 15:44:04 -0500
Subject: [PATCH] Update `testSuccessfulRetry` and code to make it pass.

---
 Sources/Operators/RetryWhen.swift | 5 ++---
 Tests/RetryWhenTests.swift        | 7 +++++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/Sources/Operators/RetryWhen.swift b/Sources/Operators/RetryWhen.swift
index 5fae26f..fecad33 100644
--- a/Sources/Operators/RetryWhen.swift
+++ b/Sources/Operators/RetryWhen.swift
@@ -44,7 +44,7 @@ extension Publishers.RetryWhen {
     class Subscription<Downstream>: Combine.Subscription where Downstream: Subscriber, Downstream.Input == Upstream.Output, Downstream.Failure == Upstream.Failure {
         private let upstream: Upstream
         private let downstream: Downstream
-        private let errorSubject = PassthroughSubject<Upstream.Failure, Never>()
+        private let errorSubject = CurrentValueSubject<Upstream.Failure?, Never>(nil)
         private var sink: Sink<Upstream, Downstream>?
         private var cancellable: AnyCancellable?
 
@@ -64,7 +64,7 @@ extension Publishers.RetryWhen {
                     return nil
                 }
             )
-            self.cancellable = errorTrigger(errorSubject.eraseToAnyPublisher())
+            self.cancellable = errorTrigger(errorSubject.compactMap { $0 }.eraseToAnyPublisher())
                 .sink(
                     receiveCompletion: { [sink] completion in
                         switch completion {
@@ -81,7 +81,6 @@ extension Publishers.RetryWhen {
                         upstream.subscribe(sink)
                     }
                 )
-            upstream.subscribe(sink!)
         }
 
         func request(_ demand: Subscribers.Demand) {
diff --git a/Tests/RetryWhenTests.swift b/Tests/RetryWhenTests.swift
index 3f3fc65..23ff40d 100644
--- a/Tests/RetryWhenTests.swift
+++ b/Tests/RetryWhenTests.swift
@@ -42,7 +42,7 @@ class RetryWhenTests: XCTestCase {
 
     func testSuccessfulRetry() {
         var times = 0
-
+        var retriesCount = 0
         var expectedOutput: Int?
 
         var completion: Subscribers.Completion<RetryWhenTests.MyError>?
@@ -57,7 +57,9 @@ class RetryWhenTests: XCTestCase {
             }
         })
         .retryWhen { error in
-            error.map { _ in }
+            error
+                .handleEvents(receiveOutput: { _ in retriesCount += 1})
+                .map { _ in }
         }
         .sink(
             receiveCompletion: { completion = $0 },
@@ -70,6 +72,7 @@ class RetryWhenTests: XCTestCase {
         )
         XCTAssertEqual(completion, .finished)
         XCTAssertEqual(times, 2)
+        XCTAssertEqual(retriesCount, 1)
     }
 
     func testRetryFailure() {