model-url-name-mixin-test.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import Ember from 'ember';
  2. import { module, test } from 'qunit';
  3. import startApp from '../helpers/start-app';
  4. import ModelUrlName from 'misago/mixins/model-url-name';
  5. var application;
  6. module('Acceptance: Model Url Name', {
  7. beforeEach: function() {
  8. application = startApp();
  9. },
  10. afterEach: function() {
  11. Ember.run(application, 'destroy');
  12. Ember.$.mockjax.clear();
  13. }
  14. });
  15. test('parseUrlName parses single word slug', function(assert) {
  16. assert.expect(2);
  17. var mixin = Ember.Object.extend(ModelUrlName).create();
  18. var parsed = mixin.parseUrlName('lorem-123');
  19. assert.equal(parsed.slug, 'lorem');
  20. assert.equal(parsed.id, '123');
  21. });
  22. test('parseUrlName parses two words slug', function(assert) {
  23. assert.expect(2);
  24. var mixin = Ember.Object.extend(ModelUrlName).create();
  25. var parsed = mixin.parseUrlName('lorem-ipsum-123');
  26. assert.equal(parsed.slug, 'lorem-ipsum');
  27. assert.equal(parsed.id, '123');
  28. });
  29. test('parseUrlName parses complex slugs', function(assert) {
  30. assert.expect(2);
  31. var mixin = Ember.Object.extend(ModelUrlName).create();
  32. var parsed = mixin.parseUrlName('lorem-123-ipsum-456-78');
  33. assert.equal(parsed.slug, 'lorem-123-ipsum-456');
  34. assert.equal(parsed.id, '78');
  35. });
  36. test('parseUrlName fails to parse invalid slugs', function(assert) {
  37. assert.expect(4);
  38. var mixin = Ember.Object.extend(ModelUrlName).create();
  39. assert.equal(mixin.parseUrlName('lorem.123'), false);
  40. assert.equal(mixin.parseUrlName('lorem-123-ipsum-456-abc'), false);
  41. assert.equal(mixin.parseUrlName('abc'), false);
  42. assert.equal(mixin.parseUrlName('123'), false);
  43. });
  44. test('getParsedUrlNameOr404 passes on valid slug', function(assert) {
  45. assert.expect(2);
  46. Ember.$.mockjax({
  47. url: '/api/users/42/',
  48. status: 403,
  49. responseText: {
  50. detail: 'Server was hit by Ember!'
  51. }
  52. });
  53. visit('user/misago-42/');
  54. andThen(function() {
  55. assert.equal(currentPath(), 'error-403');
  56. var errorMessage = Ember.$.trim(find('.error-message .lead').text());
  57. assert.equal(errorMessage, 'Server was hit by Ember!');
  58. });
  59. });
  60. test('getParsedUrlNameOr404 raises error 404 on invalid slug', function(assert) {
  61. assert.expect(1);
  62. visit('user/mis+ago-42/');
  63. andThen(function() {
  64. assert.equal(currentPath(), 'error-404');
  65. });
  66. });
  67. test('getParsedUrlNameOr404 redirects on outdated slug', function(assert) {
  68. assert.expect(2);
  69. Ember.$.mockjax({
  70. url: '/api/users/42/',
  71. status: 200,
  72. responseText: {
  73. id: '42',
  74. username: 'Miasgo',
  75. slug: 'miasgo'
  76. }
  77. });
  78. visit('user/misago-42/');
  79. andThen(function() {
  80. assert.equal(currentPath(), 'user');
  81. assert.ok(currentURL().indexOf('user/miasgo-42') !== -1);
  82. });
  83. });