|
6 | 6 | */
|
7 | 7 |
|
8 | 8 | import { describe, it } from 'mocha';
|
9 |
| -import { expectPassesRule, expectFailsRule } from './harness'; |
| 9 | +import { |
| 10 | + expectPassesRule, |
| 11 | + expectFailsRule, |
| 12 | + expectSDLErrorsFromRule, |
| 13 | +} from './harness'; |
| 14 | + |
10 | 15 | import {
|
11 | 16 | UniqueDirectivesPerLocation,
|
12 | 17 | duplicateDirectiveMessage,
|
13 | 18 | } from '../rules/UniqueDirectivesPerLocation';
|
14 | 19 |
|
| 20 | +const expectSDLErrors = expectSDLErrorsFromRule.bind( |
| 21 | + undefined, |
| 22 | + UniqueDirectivesPerLocation, |
| 23 | +); |
| 24 | + |
15 | 25 | function duplicateDirective(directiveName, l1, c1, l2, c2) {
|
16 | 26 | return {
|
17 | 27 | message: duplicateDirectiveMessage(directiveName),
|
@@ -132,4 +142,39 @@ describe('Validate: Directives Are Unique Per Location', () => {
|
132 | 142 | ],
|
133 | 143 | );
|
134 | 144 | });
|
| 145 | + |
| 146 | + it('duplicate directives on SDL definitions', () => { |
| 147 | + expectSDLErrors(` |
| 148 | + schema @directive @directive { query: Dummy } |
| 149 | + extend schema @directive @directive |
| 150 | +
|
| 151 | + scalar TestScalar @directive @directive |
| 152 | + extend scalar TestScalar @directive @directive |
| 153 | +
|
| 154 | + type TestObject @directive @directive |
| 155 | + extend type TestObject @directive @directive |
| 156 | +
|
| 157 | + interface TestInterface @directive @directive |
| 158 | + extend interface TestInterface @directive @directive |
| 159 | +
|
| 160 | + union TestUnion @directive @directive |
| 161 | + extend union TestUnion @directive @directive |
| 162 | +
|
| 163 | + input TestInput @directive @directive |
| 164 | + extend input TestInput @directive @directive |
| 165 | + `).to.deep.equal([ |
| 166 | + duplicateDirective('directive', 2, 14, 2, 25), |
| 167 | + duplicateDirective('directive', 3, 21, 3, 32), |
| 168 | + duplicateDirective('directive', 5, 25, 5, 36), |
| 169 | + duplicateDirective('directive', 6, 32, 6, 43), |
| 170 | + duplicateDirective('directive', 8, 23, 8, 34), |
| 171 | + duplicateDirective('directive', 9, 30, 9, 41), |
| 172 | + duplicateDirective('directive', 11, 31, 11, 42), |
| 173 | + duplicateDirective('directive', 12, 38, 12, 49), |
| 174 | + duplicateDirective('directive', 14, 23, 14, 34), |
| 175 | + duplicateDirective('directive', 15, 30, 15, 41), |
| 176 | + duplicateDirective('directive', 17, 23, 17, 34), |
| 177 | + duplicateDirective('directive', 18, 30, 18, 41), |
| 178 | + ]); |
| 179 | + }); |
135 | 180 | });
|
0 commit comments