# MutableStub

Artifact: [androidx.health.connect:connect-testing](https://developer.android.com/jetpack/androidx/releases/health-connect) [View Source](https://cs.android.com/search?q=file:androidx/health/connect/client/testing/stubs/MutableStub.kt+class:androidx.health.connect.client.testing.stubs.MutableStub) Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/health-connect#1.0.0-alpha04)

*** ** * ** ***


```
class MutableStub<T : Any?, R : Any> : Stub<T, R>
```

<br />

*** ** * ** ***

A `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/Stub` whose defaultHandler and queue can be mutated at any point.

Example MutableStub with a default value and a new item enqueued after consumption:

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.enqueue

val simpleMutableStub = MutableStub("default")
simpleMutableStub.next(request = 0) // Returns "default"

simpleMutableStub.enqueue("new")

simpleMutableStub.next(request = 0) // Returns "new"
simpleMutableStub.next(request = 0) // Returns "default"
```

Example MutableStub with an item in the queue and a default value, alternative construction:

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.enqueue

val mutableStub =
    MutableStub<Any, String>().apply {
        enqueue("first")
        defaultHandler = { "Default" }
    }
mutableStub.next(request = 0) // Returns "first"
mutableStub.next(request = 0) // Returns "Default"
```

Example Mutable stub with 1 element in a queue that once consumed returns a fixed response which depends on the input:

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.enqueue

val mutableStub = MutableStub<Int, String>(defaultHandler = { it.toString() })
mutableStub.enqueue("zero")
mutableStub += "one" // += is equivalent to enqueue()
mutableStub.next(request = 42) // Returns "zero"
mutableStub.next(request = 42) // Returns "one"
mutableStub.next(request = 42) // Returns "42"

// A new response can be enqueued at any time
mutableStub.enqueue("new")
// The default handler can also change at any time
mutableStub.defaultHandler = { (it + 1).toString() }
mutableStub.next(request = 42) // Returns "new"
mutableStub.next(request = 42) // Returns "43"
```

Example Mutable stub created with the `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/package-summary#buildStub(kotlin.Function1)` builder:

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.buildStub
import androidx.health.connect.client.testing.stubs.enqueue

val builderMutableStub =
    buildStub<Int, String> {
        enqueue("first")
        defaultHandler = { "Default" }
    }
builderMutableStub.next(request = 0) // Returns "first"
builderMutableStub.next(request = 0) // Returns "Default"
```

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/Stub` |   |

## Summary

| ### Public constructors |
|---|
| `<T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html> https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub#MutableStub(kotlin.Function1)(defaultHandler: (T) -> R?)` |

| ### Public functions |
|---|---|
| `open R?` | `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub#next(kotlin.Any)(request: T)` Returns the next item. |

| ### Public properties |
|---|---|
| `(T) -> R?` | `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub#defaultHandler()` Function that maps a request `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub` to a response `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub`. |

| ### Extension functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `<R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html> https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub<*, R>.https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub#(androidx.health.connect.client.testing.stubs.MutableStub).enqueue(kotlin.collections.Iterable)(values: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-iterable/index.html<R>)` Adds a new item to the `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub`'s queue. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `<R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html> https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub<*, R>.https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub#(androidx.health.connect.client.testing.stubs.MutableStub).enqueue(kotlin.Array)(vararg values: R)` Adds a new item to the `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub`'s queue. |
| `operator https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `<R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html> https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub<*, R>.https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub#(androidx.health.connect.client.testing.stubs.MutableStub).plusAssign(kotlin.Any)(value: R)` Adds a new item to the `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub`'s queue. |

## Public constructors

### MutableStub

```
<T : Any?, R : Any> MutableStub(defaultHandler: (T) -> R? = { null })
```

## Public functions

### next

```
open fun next(request: T): R?
```

Returns the next item.

## Public properties

### defaultHandler

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/health-connect#1.0.0-alpha04)

```
var defaultHandler: (T) -> R?
```

Function that maps a request `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub` to a response `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub`. Used when the queue is empty.

## Extension functions

### MutableStub.enqueue

Artifact: [androidx.health.connect:connect-testing](https://developer.android.com/jetpack/androidx/releases/health-connect) [View Source](https://cs.android.com/search?q=file:androidx/health/connect/client/testing/stubs/MutableStub.kt+function:enqueue)

```
fun <R : Any> MutableStub<*, R>.enqueue(values: Iterable<R>): Unit
```

Adds a new item to the `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub`'s queue.

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.buildStub
import androidx.health.connect.client.testing.stubs.enqueue

val builderMutableStub =
    buildStub<Int, String> {
        enqueue("first")
        defaultHandler = { "Default" }
    }
builderMutableStub.next(request = 0) // Returns "first"
builderMutableStub.next(request = 0) // Returns "Default"
```

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.enqueue

val mutableStub = MutableStub<Int, String>(defaultHandler = { it.toString() })
mutableStub.enqueue("zero")
mutableStub += "one" // += is equivalent to enqueue()
mutableStub.next(request = 42) // Returns "zero"
mutableStub.next(request = 42) // Returns "one"
mutableStub.next(request = 42) // Returns "42"

// A new response can be enqueued at any time
mutableStub.enqueue("new")
// The default handler can also change at any time
mutableStub.defaultHandler = { (it + 1).toString() }
mutableStub.next(request = 42) // Returns "new"
mutableStub.next(request = 42) // Returns "43"
```

### MutableStub.enqueue

Artifact: [androidx.health.connect:connect-testing](https://developer.android.com/jetpack/androidx/releases/health-connect) [View Source](https://cs.android.com/search?q=file:androidx/health/connect/client/testing/stubs/MutableStub.kt+function:enqueue)

```
fun <R : Any> MutableStub<*, R>.enqueue(vararg values: R): Unit
```

Adds a new item to the `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub`'s queue.

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.buildStub
import androidx.health.connect.client.testing.stubs.enqueue

val builderMutableStub =
    buildStub<Int, String> {
        enqueue("first")
        defaultHandler = { "Default" }
    }
builderMutableStub.next(request = 0) // Returns "first"
builderMutableStub.next(request = 0) // Returns "Default"
```

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.enqueue

val mutableStub = MutableStub<Int, String>(defaultHandler = { it.toString() })
mutableStub.enqueue("zero")
mutableStub += "one" // += is equivalent to enqueue()
mutableStub.next(request = 42) // Returns "zero"
mutableStub.next(request = 42) // Returns "one"
mutableStub.next(request = 42) // Returns "42"

// A new response can be enqueued at any time
mutableStub.enqueue("new")
// The default handler can also change at any time
mutableStub.defaultHandler = { (it + 1).toString() }
mutableStub.next(request = 42) // Returns "new"
mutableStub.next(request = 42) // Returns "43"
```

### MutableStub.plusAssign

Artifact: [androidx.health.connect:connect-testing](https://developer.android.com/jetpack/androidx/releases/health-connect) [View Source](https://cs.android.com/search?q=file:androidx/health/connect/client/testing/stubs/MutableStub.kt+function:plusAssign)

```
operator fun <R : Any> MutableStub<*, R>.plusAssign(value: R): Unit
```

Adds a new item to the `https://developer.android.com/reference/kotlin/androidx/health/connect/client/testing/stubs/MutableStub`'s queue.

```kotlin
import androidx.health.connect.client.testing.stubs.MutableStub
import androidx.health.connect.client.testing.stubs.enqueue

val mutableStub = MutableStub<Int, String>(defaultHandler = { it.toString() })
mutableStub.enqueue("zero")
mutableStub += "one" // += is equivalent to enqueue()
mutableStub.next(request = 42) // Returns "zero"
mutableStub.next(request = 42) // Returns "one"
mutableStub.next(request = 42) // Returns "42"

// A new response can be enqueued at any time
mutableStub.enqueue("new")
// The default handler can also change at any time
mutableStub.defaultHandler = { (it + 1).toString() }
mutableStub.next(request = 42) // Returns "new"
mutableStub.next(request = 42) // Returns "43"
```