com-lihaoyi / cask

Cask: a Scala HTTP micro-framework. Cask makes it easy to set up a website, backend server, or REST API using Scala
https://com-lihaoyi.github.io/cask/
Other
527 stars 55 forks source link

Fix DispatchTrie validation and reporting of invalid routes #70

Closed lihaoyi closed 2 years ago

lihaoyi commented 2 years ago

This regressed in https://github.com/com-lihaoyi/cask/pull/52, resulting in both false positives (where a GET and a POST shared the same route, giving an unnecessary error) and false negatives (where multiple GETs sharing the same route failed to create an error). The basic problem was that since combining the various HTTP methods into a single routing trie, the old logic comparing uniqueness/duplication/etc. was no longer correct in the new combined trie.

This PR fixes it by doing a groupBy to split up the entries in the combined trie by HTTP method, before running essentially the same validation.

We augment the test suite, tightening up cask/test/src/test/cask/DispatchTrieTests.scala to make it stricter, checking exact error messages to ensure we get not just any failure but the correct failure when the validation code triggers. This should hopefully catch this sort of regression in future.