/**
 * Tests for {{name}}
 */

import { describe, it } from 'node:test';
import assert from 'node:assert';
import { {{camelCaseName}}Fn, {{pascalCaseName}}Result } from './{{kebabCaseName}}.js';
import { {{camelCaseName}}Definition } from './{{kebabCaseName}}-definition.js';

describe('{{name}}', () => {
  describe('Definition', () => {
    it('should have valid definition structure', () => {
      assert.strictEqual({{camelCaseName}}Definition.id, '{{id}}');
      assert.strictEqual({{camelCaseName}}Definition.name, '{{name}}');
      assert.strictEqual({{camelCaseName}}Definition.category, '{{category}}');
    });

    it('should have all required parameters', () => {
      const requiredParams = {{camelCaseName}}Definition.parameters.filter(p => p.required);
      assert.ok(requiredParams.length > 0, 'Should have at least one required parameter');
    });
  });

  describe('Implementation', () => {
    it('should execute successfully with valid input', () => {
      const result = {{camelCaseName}}Fn({{camelCaseName}}Definition.example.input);
      assert.strictEqual(result.success, true);
      if (result.success) {
        assert.ok(result.data, 'Should return data');
      }
    });

    it('should validate required parameters', () => {
      const result = {{camelCaseName}}Fn({});
      assert.strictEqual(result.success, false);
      if (!result.success) {
        assert.ok(result.error, 'Should return error message');
      }
    });

{{#each testCases}}
    it('{{description}}', () => {
      const result = {{../camelCaseName}}Fn({{{json input}}});
      assert.strictEqual(result.success, {{expectedSuccess}});
{{#if expectedSuccess}}
      if (result.success) {
        {{#each assertions}}
        assert.{{assertType}}(result.data.{{field}}, {{json expected}});
        {{/each}}
      }
{{else}}
      if (!result.success) {
        assert.ok(result.error.includes('{{expectedError}}'));
      }
{{/if}}
    });

{{/each}}
  });

  describe('Edge Cases', () => {
    it('should handle empty input gracefully', () => {
      const result = {{camelCaseName}}Fn({});
      assert.ok(result.success !== undefined);
    });

    it('should handle malformed input', () => {
      const result = {{camelCaseName}}Fn({ invalidParam: 'test' });
      assert.ok(result.success !== undefined);
    });
  });
});
