# 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)

*** ** * ** ***


```
public final class MutableStub<T extends Object, R extends Object> implements Stub<@NonNull T, @NonNull R>
```

<br />

*** ** * ** ***

A `https://developer.android.com/reference/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/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/androidx/health/connect/client/testing/stubs/Stub` |   |

## Summary

| ### Public constructors |
|---|
| `<T extends https://developer.android.com/reference/java/lang/Object.html, R extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub#MutableStub(kotlin.Function1)( @https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull T, R> defaultHandler )` |

| ### Public methods |
|---|---|
| `final @https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull T, R>` | `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub#getDefaultHandler()()` Function that maps a request `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub` to a response `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub`. |
| `R` | `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub#next(kotlin.Any)(@https://developer.android.com/reference/androidx/annotation/NonNull T request)` Returns the next item. |
| `final void` | `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub#setDefaultHandler(kotlin.Function1)(@https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull T, R> value)` Function that maps a request `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub` to a response `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub`. |

| ### Extension functions |
|---|---|
| `final void` | `<R extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStubs.https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub#(androidx.health.connect.client.testing.stubs.MutableStub).enqueue(kotlin.collections.Iterable)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub<@https://developer.android.com/reference/androidx/annotation/NonNull ?, @https://developer.android.com/reference/androidx/annotation/NonNull R> receiver, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Iterable.html<@https://developer.android.com/reference/androidx/annotation/NonNull R> values )` Adds a new item to the `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub`'s queue. |
| `final void` | `<R extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStubs.https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub#(androidx.health.connect.client.testing.stubs.MutableStub).enqueue(kotlin.Array)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub<@https://developer.android.com/reference/androidx/annotation/NonNull ?, @https://developer.android.com/reference/androidx/annotation/NonNull R> receiver, @https://developer.android.com/reference/androidx/annotation/NonNull R... values )` Adds a new item to the `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub`'s queue. |
| `final void` | `<R extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStubs.https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub#(androidx.health.connect.client.testing.stubs.MutableStub).plusAssign(kotlin.Any)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub<@https://developer.android.com/reference/androidx/annotation/NonNull ?, @https://developer.android.com/reference/androidx/annotation/NonNull R> receiver, @https://developer.android.com/reference/androidx/annotation/NonNull R value )` Adds a new item to the `https://developer.android.com/reference/androidx/health/connect/client/testing/stubs/MutableStub`'s queue. |

## Public constructors

### MutableStub

```
public <T extends Object, R extends Object> MutableStub(
    @NonNull Function1<@NonNull T, R> defaultHandler
)
```

## Public methods

### getDefaultHandler

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

```
public final @NonNull Function1<@NonNull T, R> getDefaultHandler()
```

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

### next

```
public R next(@NonNull T request)
```

Returns the next item.

### setDefaultHandler

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

```
public final void setDefaultHandler(@NonNull Function1<@NonNull T, R> value)
```

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

## Extension functions

### MutableStubs.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)

```
public final void <R extends Object> MutableStubs.enqueue(
    @NonNull MutableStub<@NonNull ?, @NonNull R> receiver,
    @NonNull Iterable<@NonNull R> values
)
```

Adds a new item to the `https://developer.android.com/reference/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"
```

### MutableStubs.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)

```
public final void <R extends Object> MutableStubs.enqueue(
    @NonNull MutableStub<@NonNull ?, @NonNull R> receiver,
    @NonNull R... values
)
```

Adds a new item to the `https://developer.android.com/reference/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"
```

### MutableStubs.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)

```
public final void <R extends Object> MutableStubs.plusAssign(
    @NonNull MutableStub<@NonNull ?, @NonNull R> receiver,
    @NonNull R value
)
```

Adds a new item to the `https://developer.android.com/reference/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"
```