Fix project hashtag bugs: duplicate tags, uppercase tags
Summary:
Ref T8509. This fixes three issues:
- Adding a slug like UPPERCASE would not give you a normalized slug. (Now: normalizes as uppercase.)
- Adding a slug like UPPERCASE would allow you to give two different projects the different tags UPPERCASE and uppercase (and UpPeRcAsE, etc). (Now: second tag is rejected as a duplicate.)
- Adding multiple identical or similar slugs would produce a duplicate key exception. (Now: ignores the duplicates.)
Test Plan:
- Added test coverage.
- Made tests pass.
- Hit these cases in the UI.
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T8509
Differential Revision: https://secure.phabricator.com/D14870