require 'spec_helper' class RFlow class Component context 'Input and output ports' do let(:connection) { RFlow::Connection.new(RFlow::Configuration::NullConnectionConfiguration.new) } let(:message) { RFlow::Message.new('RFlow::Message::Data::Raw') } describe Port do it 'should not be connected' do expect(described_class.new(nil)).not_to be_connected end end describe HashPort do it 'should not be connected' do expect(described_class.new(nil)).not_to be_connected end end [InputPort, OutputPort].each do |c| describe c do context '#add_connection' do it 'should add the connection' do described_class.new(nil).tap do |port| port.add_connection(nil, connection) expect(port[nil].connections).to include connection end end end context '#remove_connection' do it 'should remove the connection' do described_class.new(nil).tap do |port| port.add_connection(nil, connection) port.remove_connection(nil, connection) expect(port[nil].connections).not_to include connection end end end end end describe InputPort do context '#connect!' do it 'should be connected' do expect(connection).to receive(:connect_input!) described_class.new(nil).tap do |port| port.add_connection(nil, connection) expect(port).not_to be_connected port.connect! expect(port).to be_connected end end end end describe OutputPort do context '#connect!' do it 'should be connected' do expect(connection).to receive(:connect_output!) described_class.new(nil).tap do |port| port.add_connection(nil, connection) expect(port).not_to be_connected port.connect! expect(port).to be_connected end end end context '#add_connection' do it 'should deliver messages to the new connection' do described_class.new(nil).tap do |port| port.connect! port.all_connections # trigger caching expect(connection).to receive(:connect_output!) expect(connection).to receive(:send_message).with(message) port.add_connection(nil, connection) port.send_message(message) end end end context '#remove_connection' do it 'should not deliver messages to the old connection' do described_class.new(nil).tap do |port| allow(connection).to receive(:connect_output!) port.add_connection(nil, connection) port.connect! port.all_connections # trigger caching expect(connection).not_to receive(:send_message) port.remove_connection(nil, connection) port.send_message(message) end end end end end end end