-
Notifications
You must be signed in to change notification settings - Fork 580
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
Updated interface #762
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
mbrandonw
approved these changes
Aug 30, 2023
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 [@​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 ([#​765](https://togithub.com/pointfreeco/swift-snapshot-testing/issues/765)). The `SnapshotTesting` and `InlineSnapshotTesting` are fully documented using DocC. - Infrastructure: swift-format support ([#​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 [@​BarredEwe](https://togithub.com/BarredEwe), [https://github.com/pointfreeco/swift-snapshot-testing/pull/746](https://togithub.com/pointfreeco/swift-snapshot-testing/pull/746); [@​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 - [@​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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Let's introduce a more streamlined version of
assertSnapshot
that takes anof
instead of amatching
parameter: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.