mirror of
https://github.com/status-im/consul.git
synced 2025-02-20 01:18:49 +00:00
Encodes any variables passed in to be used for template interpolation, but importantly nothing else in the URL apart from the variables themselves. 'Generally' service names are reasonably URL safe, but we know of usecases using at least /s in service names.
111 lines
2.5 KiB
JavaScript
111 lines
2.5 KiB
JavaScript
import { moduleForComponent, test } from 'ember-qunit';
|
|
import hbs from 'htmlbars-inline-precompile';
|
|
|
|
moduleForComponent('templated-anchor', 'Integration | Component | templated anchor', {
|
|
integration: true,
|
|
});
|
|
|
|
test('it renders', function(assert) {
|
|
[
|
|
{
|
|
href: 'http://localhost/?={{Name}}/{{ID}}',
|
|
vars: {
|
|
Name: 'name',
|
|
ID: 'id',
|
|
},
|
|
result: 'http://localhost/?=name/id',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{Name}}/{{ID}}',
|
|
vars: {
|
|
Name: '{{Name}}',
|
|
ID: '{{ID}}',
|
|
},
|
|
result: 'http://localhost/?=%7B%7BName%7D%7D/%7B%7BID%7D%7D',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{deep.Name}}/{{deep.ID}}',
|
|
vars: {
|
|
deep: {
|
|
Name: '{{Name}}',
|
|
ID: '{{ID}}',
|
|
},
|
|
},
|
|
result: 'http://localhost/?=%7B%7BName%7D%7D/%7B%7BID%7D%7D',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{}}/{{}}',
|
|
vars: {
|
|
Name: 'name',
|
|
ID: 'id',
|
|
},
|
|
// If you don't pass actual variables then nothing
|
|
// gets replaced and nothing is URL encoded
|
|
result: 'http://localhost/?={{}}/{{}}',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{Service_Name}}/{{Meta-Key}}',
|
|
vars: {
|
|
Service_Name: 'name',
|
|
['Meta-Key']: 'id',
|
|
},
|
|
result: 'http://localhost/?=name/id',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{Service_Name}}/{{Meta-Key}}',
|
|
vars: {
|
|
WrongPropertyName: 'name',
|
|
['Meta-Key']: 'id',
|
|
},
|
|
result: 'http://localhost/?=/id',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{.Name}}',
|
|
vars: {
|
|
['.Name']: 'name',
|
|
},
|
|
result: 'http://localhost/?=',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{.}}',
|
|
vars: {
|
|
['.']: 'name',
|
|
},
|
|
result: 'http://localhost/?=',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{deep..Name}}',
|
|
vars: {
|
|
deep: {
|
|
Name: 'Name',
|
|
ID: 'ID',
|
|
},
|
|
},
|
|
result: 'http://localhost/?=',
|
|
},
|
|
{
|
|
href: 'http://localhost/?={{deep.Name}}',
|
|
vars: {
|
|
deep: {
|
|
Name: '#Na/me',
|
|
ID: 'ID',
|
|
},
|
|
},
|
|
result: 'http://localhost/?=%23Na%2Fme',
|
|
},
|
|
].forEach(item => {
|
|
this.set('item', item);
|
|
this.render(hbs`
|
|
{{#templated-anchor href=item.href vars=item.vars}}
|
|
Dashboard link
|
|
{{/templated-anchor}}
|
|
`);
|
|
assert.equal(
|
|
this.$()
|
|
.find('a')
|
|
.attr('href'),
|
|
item.result
|
|
);
|
|
});
|
|
});
|