Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated interface #762

Merged
merged 2 commits into from
Aug 30, 2023
Merged

Updated interface #762

merged 2 commits into from
Aug 30, 2023

Conversation

stephencelis
Copy link
Member

Let's introduce a more streamlined version of assertSnapshot that takes an of instead of a matching parameter:

-assertSnapshot(matching: value, as: .json)
+assertSnapshot(of: value, as: .json)

While matching read OK, it is also a little confusing, since it sounds like the value itself is a snapshot, but the helper is really taking a snapshot of the value to be compared.

We'll keep the old version around for a long time as a soft deprecation, but whenever we get close to realizing a 2.0 we can make a harder break.

Let's introduce a more streamlined version of `assertSnapshot` that
takes an `of` instead of a `matching` parameter:

```diff
-assertSnapshot(matching: value, as: .json)
+assertSnapshot(of: value, as: .json)
```

While `matching` read OK, it is also a little confusing, since it sounds
like the value itself is a snapshot, but the helper is really taking a
snapshot _of_ the value to be compared.

We'll keep the old version around for a long time as a soft deprecation,
but whenever we get close to realizing a 2.0 we can make a harder break.
@stephencelis stephencelis merged commit 3ccde63 into main Aug 30, 2023
8 checks passed
@stephencelis stephencelis deleted the assert-snapshot-of branch August 30, 2023 22:13
isismsilva referenced this pull request in powerhome/playbook-swift Oct 2, 2023
#146)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[pointfreeco/swift-snapshot-testing](https://togithub.com/pointfreeco/swift-snapshot-testing)
| minor | `from: "1.11.1"` -> `from: "1.13.0"` |

---

### Release Notes

<details>
<summary>pointfreeco/swift-snapshot-testing
(pointfreeco/swift-snapshot-testing)</summary>

###
[`v1.13.0`](https://togithub.com/pointfreeco/swift-snapshot-testing/releases/tag/1.13.0)

[Compare
Source](https://togithub.com/pointfreeco/swift-snapshot-testing/compare/1.12.0...1.13.0)

#### What's Changed

- Added: *Inline* Snapshot Testing
([https://github.com/pointfreeco/swift-snapshot-testing/pull/764](https://togithub.com/pointfreeco/swift-snapshot-testing/pull/764)).
This allows your text-based snapshots to live right in the test source
code, rather than in an external file:


![inline-snapshot](https://togithub.com/pointfreeco/swift-snapshot-testing/assets/658/832172a0-ec62-42b8-aba8-79ac9143df08)

While the library has had experimental support for this feature since
[1.5.0](https://togithub.com/pointfreeco/swift-snapshot-testing/releases/1.5.0)
thanks to [@&#8203;rjchatfield](https://togithub.com/rjchatfield)
([https://github.com/pointfreeco/swift-snapshot-testing/pull/199](https://togithub.com/pointfreeco/swift-snapshot-testing/pull/199)),
we've finally put the finishing touches to it:

- Inline snapshot testing is available in a separate
`InlineSnapshotTesting` module. To use inline snapshot testing, add a
dependency on this module and update your existing imports:

        ```diff
        -import SnapshotTesting
        +import InlineSnapshotTesting
        ```

The feature has been rewritten to use
[SwiftSyntax](https://togithub.com/apple/swift-syntax). While a
heavyweight dependency, it is a more reasonable tool for generating
Swift code than string substitution, and will be an increasingly common
dependency as the de facto tool for writing Swift macros.

The main `SnapshotTesting` module does not depend on SwiftSyntax, so
existing snapshot tests will not incur cost of compiling SwiftSyntax.

- The API now follows the same structure as `assertSnapshot`, except it
uses a trailing closure to capture the inline snapshot. This makes it
easy to update an existing snapshot test to use inline snapshots:

        ```diff
        -assertSnapshot(of: user, as: .json)
        +assertInlineSnapshot(of: user, as .json)
        ```

After this assertion runs, the test source code is updated in place:

        ```swift
        assertInlineSnapshot(of: user, as: .json) {
          """
          {
            "id" : 42,
            "isAdmin" : true,
            "name" : "Blob"
          }
          """
        }
        ```

These trailing closures are easy to select in Xcode in order to delete
and re-record a snapshot: simply double-click one of the braces to
highlight the closure, delete, and run the test.

- Inline snapshotting's `assertInlineSnapshot` testing tool is fully
customizable so that you can build your own testing helpers on top of it
without your users even knowing they are using snapshot testing. In
fact, we do this to create a testing tool that helps us test the Swift
code that powers [Point-Free](https://www.pointfree.co). It's called
[`assertRequest`][assert-request-gh], and it allows you to
simultaneously assert the request being made to the server (including
URL, query parameters, headers, POST body) as well as the response from
the server (including status code and headers).

For example, to test that when a request is made for a user to join a
team subscription, we can [write the following][assert-request-example]:

        ```swift
        await assertRequest(
          connection(
            from: request(
to: .teamInviteCode(.join(code: subscription.teamInviteCode, email:
nil)),
              session: .loggedIn(as: currentUser)
            )
          )
        )
        ```

And when we first run the test it will automatically
[expand][assert-request-example]:

        ```swift
        await assertRequest(
          connection(
            from: request(
to: .teamInviteCode(.join(code: subscription.teamInviteCode, email:
nil)),
              session: .loggedIn(as: currentUser)
            )
          )
        ) {
          """
POST http://localhost:8080/join/subscriptions-team_invite_code3
Cookie: pf_session={"userId":"00000000-0000-0000-0000-000000000001"}
          """
        } response: {
          """
          302 Found
          Location: /account
          Referrer-Policy: strict-origin-when-cross-origin
Set-Cookie: pf_session={"flash":{"message":"You now have access to
Point-Free!","priority":"notice"},"userId":"00000000-0000-0000-0000-000000000001"};
Expires=Sat, 29 Jan 2028 00:00:00 GMT; Path=/
          X-Content-Type-Options: nosniff
          X-Download-Options: noopen
          X-Frame-Options: SAMEORIGIN
          X-Permitted-Cross-Domain-Policies: none
          X-XSS-Protection: 1; mode=block
          """
        }
        ```

This shows that the response redirects the use back to their account
page and shows them the flash message that they now have full access to
Point-Free. This makes writing complex and nuanced tests incredibly
easy, and so there is no reason to not write lots of tests for all the
subtle edge cases of your application's logic.

- Added: DocC documentation
([#&#8203;765](https://togithub.com/pointfreeco/swift-snapshot-testing/issues/765)).
The `SnapshotTesting` and `InlineSnapshotTesting` are fully documented
using DocC.

- Infrastructure: swift-format support
([#&#8203;765](https://togithub.com/pointfreeco/swift-snapshot-testing/issues/765)).
The library is now auto-formatted using swift-format.

**Full Changelog**:
pointfreeco/swift-snapshot-testing@1.12.0...0.13.0

[assert-request-gh]:
https://togithub.com/pointfreeco/pointfreeco/blob/5b5cd26d8240bd0e1afb77b7ef342458592c7366/Sources/PointFreeTestSupport/PointFreeTestSupport.swift#L42-L87

[assert-request-example]:
https://togithub.com/pointfreeco/pointfreeco/blob/a237ce693258b363ebfb4bdffe6025cc28ac891f/Tests/PointFreeTests/JoinMiddlewareTests.swift#L285-L309

###
[`v1.12.0`](https://togithub.com/pointfreeco/swift-snapshot-testing/releases/tag/1.12.0)

[Compare
Source](https://togithub.com/pointfreeco/swift-snapshot-testing/compare/1.11.1...1.12.0)

#### What's Changed

- Added: `assertSnapshot(of:)` is now the default interface for snapshot
assertions
([https://github.com/pointfreeco/swift-snapshot-testing/pull/762](https://togithub.com/pointfreeco/swift-snapshot-testing/pull/762)).
`assertSnapshot(matching:)` will remain in 1.x as a soft-deprecated
alias.
- Infrastructure: Add to README plug-ins (thanks
[@&#8203;BarredEwe](https://togithub.com/BarredEwe),
[https://github.com/pointfreeco/swift-snapshot-testing/pull/746](https://togithub.com/pointfreeco/swift-snapshot-testing/pull/746);
[@&#8203;tahirmt](https://togithub.com/tahirmt),
[https://github.com/pointfreeco/swift-snapshot-testing/pull/763](https://togithub.com/pointfreeco/swift-snapshot-testing/pull/763)).
- Infrastructure: Don't ignore Package.resolved
([https://github.com/pointfreeco/swift-snapshot-testing/pull/649](https://togithub.com/pointfreeco/swift-snapshot-testing/pull/649)).

#### New Contributors

- [@&#8203;BarredEwe](https://togithub.com/BarredEwe) made their first
contribution in
[https://github.com/pointfreeco/swift-snapshot-testing/pull/746](https://togithub.com/pointfreeco/swift-snapshot-testing/pull/746)

**Full Changelog**:
pointfreeco/swift-snapshot-testing@1.11.1...1.12.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/powerhome/PlaybookSwift).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi42OC4xIiwidXBkYXRlZEluVmVyIjoiMzYuODMuMCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Muhieddine-El-Kaissi pushed a commit to thumbtack/swift-snapshot-testing that referenced this pull request Aug 8, 2024
* Updated interface

Let's introduce a more streamlined version of `assertSnapshot` that
takes an `of` instead of a `matching` parameter:

```diff
-assertSnapshot(matching: value, as: .json)
+assertSnapshot(of: value, as: .json)
```

While `matching` read OK, it is also a little confusing, since it sounds
like the value itself is a snapshot, but the helper is really taking a
snapshot _of_ the value to be compared.

We'll keep the old version around for a long time as a soft deprecation,
but whenever we get close to realizing a 2.0 we can make a harder break.

* wip
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants