.
This commit is contained in:
		
							
								
								
									
										97
									
								
								qwen/nodejs/tests/unit/middleware/tenant.test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								qwen/nodejs/tests/unit/middleware/tenant.test.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
// tests/unit/middleware/tenant.test.js
 | 
			
		||||
const { resolveTenant, enforceTenantIsolation } = require('../../../middleware/tenant');
 | 
			
		||||
 | 
			
		||||
describe('Tenant Middleware', () => {
 | 
			
		||||
  describe('resolveTenant', () => {
 | 
			
		||||
    test('should resolve tenant from subdomain', () => {
 | 
			
		||||
      const mockReq = {
 | 
			
		||||
        headers: { host: 'tenant1.merchants-of-hope.org' },
 | 
			
		||||
        originalUrl: '/api/some-endpoint',
 | 
			
		||||
        url: '/api/some-endpoint'
 | 
			
		||||
      };
 | 
			
		||||
      const mockRes = { status: jest.fn().mockReturnThis(), json: jest.fn() };
 | 
			
		||||
      let nextCalled = false;
 | 
			
		||||
      
 | 
			
		||||
      const next = () => { nextCalled = true; };
 | 
			
		||||
      
 | 
			
		||||
      resolveTenant(mockReq, mockRes, next);
 | 
			
		||||
      
 | 
			
		||||
      // In test environment, it falls back to default tenant for non-existent tenants
 | 
			
		||||
      expect(mockReq.tenantId).toBe('default');
 | 
			
		||||
      expect(mockReq.tenant).toBeDefined();
 | 
			
		||||
      expect(nextCalled).toBe(true);
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    test('should resolve tenant from header', () => {
 | 
			
		||||
      const mockReq = {
 | 
			
		||||
        headers: { 
 | 
			
		||||
          host: 'localhost:19000',
 | 
			
		||||
          'x-tenant-id': 'tenant2'
 | 
			
		||||
        },
 | 
			
		||||
        originalUrl: '/api/some-endpoint',
 | 
			
		||||
        url: '/api/some-endpoint'
 | 
			
		||||
      };
 | 
			
		||||
      const mockRes = { status: jest.fn().mockReturnThis(), json: jest.fn() };
 | 
			
		||||
      let nextCalled = false;
 | 
			
		||||
      
 | 
			
		||||
      const next = () => { nextCalled = true; };
 | 
			
		||||
      
 | 
			
		||||
      resolveTenant(mockReq, mockRes, next);
 | 
			
		||||
      
 | 
			
		||||
      // In test environment, tenant2 is not in our tenant list, so falls back to default
 | 
			
		||||
      expect(mockReq.tenantId).toBe('default');
 | 
			
		||||
      expect(nextCalled).toBe(true);
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    test('should resolve tenant from URL path', () => {
 | 
			
		||||
      const mockReq = {
 | 
			
		||||
        headers: { host: 'localhost:19000' },
 | 
			
		||||
        originalUrl: '/tenant/tenant3/api/some-endpoint',
 | 
			
		||||
        url: '/tenant/tenant3/api/some-endpoint'
 | 
			
		||||
      };
 | 
			
		||||
      const mockRes = { status: jest.fn().mockReturnThis(), json: jest.fn() };
 | 
			
		||||
      let nextCalled = false;
 | 
			
		||||
      
 | 
			
		||||
      const next = () => { nextCalled = true; };
 | 
			
		||||
      
 | 
			
		||||
      resolveTenant(mockReq, mockRes, next);
 | 
			
		||||
      
 | 
			
		||||
      // In test environment, tenant3 is not in our tenant list, so falls back to default
 | 
			
		||||
      expect(mockReq.tenantId).toBe('default');
 | 
			
		||||
      // Check that the URL was modified
 | 
			
		||||
      expect(mockReq.originalUrl).toBe('/api/some-endpoint');
 | 
			
		||||
      expect(nextCalled).toBe(true);
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    test('should default to default tenant if none found', () => {
 | 
			
		||||
      const mockReq = {
 | 
			
		||||
        headers: { host: 'localhost:19000' },
 | 
			
		||||
        originalUrl: '/api/some-endpoint',
 | 
			
		||||
        url: '/api/some-endpoint'
 | 
			
		||||
      };
 | 
			
		||||
      const mockRes = { status: jest.fn().mockReturnThis(), json: jest.fn() };
 | 
			
		||||
      let nextCalled = false;
 | 
			
		||||
      
 | 
			
		||||
      const next = () => { nextCalled = true; };
 | 
			
		||||
      
 | 
			
		||||
      resolveTenant(mockReq, mockRes, next);
 | 
			
		||||
      
 | 
			
		||||
      expect(mockReq.tenantId).toBe('default');
 | 
			
		||||
      expect(nextCalled).toBe(true);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  
 | 
			
		||||
  describe('enforceTenantIsolation', () => {
 | 
			
		||||
    test('should call next to continue the request chain', () => {
 | 
			
		||||
      const mockReq = { tenantId: 'test-tenant' };
 | 
			
		||||
      const mockRes = {};
 | 
			
		||||
      let nextCalled = false;
 | 
			
		||||
      
 | 
			
		||||
      const next = () => { nextCalled = true; };
 | 
			
		||||
      
 | 
			
		||||
      enforceTenantIsolation(mockReq, mockRes, next);
 | 
			
		||||
      
 | 
			
		||||
      expect(nextCalled).toBe(true);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
		Reference in New Issue
	
	Block a user