import 'package:angel3_mq/src/exchange/fanout_exchange.dart'; import 'package:angel3_mq/src/message/message.dart'; import 'package:angel3_mq/src/queue/queue.dart'; import 'package:test/test.dart'; void main() { group('FanoutExchange', () { test('bindQueue should add a queue to the exchange', () { final fanoutExchange = FanoutExchange('my_fanout_exchange'); final queue1 = Queue('queue_1'); final queue2 = Queue('queue_2'); fanoutExchange ..bindQueue(queue: queue1, bindingKey: 'binding_key_1') ..bindQueue(queue: queue2, bindingKey: 'binding_key_2'); expect(fanoutExchange.bindings.get('').hasQueues(), isTrue); }); test('unbindQueue should remove a queue from the exchange', () { final fanoutExchange = FanoutExchange('my_fanout_exchange'); final queue1 = Queue('queue_1'); final queue2 = Queue('queue_2'); fanoutExchange ..bindQueue(queue: queue1, bindingKey: 'binding_key_1') ..bindQueue(queue: queue2, bindingKey: 'binding_key_2') ..unbindQueue(queueId: 'queue_1', bindingKey: 'binding_key_1') ..unbindQueue(queueId: 'queue_2', bindingKey: 'binding_key_2'); expect(fanoutExchange.bindings.get('').hasQueues(), isFalse); }); test('forwardMessage should forward a message to all associated queues', () { final fanoutExchange = FanoutExchange('my_fanout_exchange'); final queue1 = Queue('queue_1'); final queue2 = Queue('queue_2'); fanoutExchange ..bindQueue(queue: queue1, bindingKey: 'binding_key_1') ..bindQueue(queue: queue2, bindingKey: 'binding_key_2'); final message = Message( headers: {'contentType': 'json', 'sender': 'Alice'}, payload: {'text': 'Hello, World!'}, timestamp: '2023-09-07T12:00:002', ); fanoutExchange.forwardMessage(message: message); expect(queue1.latestMessage, equals(message)); expect(queue2.latestMessage, equals(message)); }); test('removeQueue removes a queue from all bindings', () { final queue1 = Queue('queue_1'); final fanoutExchange = FanoutExchange('my_fanout_exchange') ..bindQueue(queue: queue1, bindingKey: '') ..unbindQueue( queueId: queue1.id, bindingKey: '', ); expect(fanoutExchange.bindings.get('').hasQueues(), isFalse); }); }); }