| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- require 'api_client'
- RSpec.describe 'REST Server' do
- before(:all) do
- @client = ApiClient.new(ENV.fetch('ESPMH_HOSTNAME'), ENV.fetch('ESPMH_TEST_DEVICE_ID_BASE'))
- @client.upload_json('/settings', 'settings.json')
- @username = 'a'
- @password = 'a'
- end
- context 'authentication' do
- after(:all) do
- @client.set_auth!(@username, @password)
- @client.put('/settings', admin_username: '', admin_password: '')
- end
- it 'should not require auth unless both username and password are set' do
- @client.put('/settings', admin_username: 'abc', admin_password: '')
- expect { @client.get('/settings') }.not_to raise_error
- @client.put('/settings', admin_username: '', admin_password: 'abc')
- expect { @client.get('/settings') }.not_to raise_error
- @client.put('/settings', admin_username: '', admin_password: '')
- expect { @client.get('/settings') }.not_to raise_error
- end
- it 'should require auth for all routes when password is set' do
- @client.put('/settings', admin_username: @username, admin_password: @password)
- # Try no auth
- expect { @client.get('/settings') }.to raise_error(Net::HTTPServerException)
- # Try wrong username
- @client.set_auth!("#{@username}wronguser", @password)
- expect { @client.get('/settings') }.to raise_error(Net::HTTPServerException)
- # Try wrong password
- @client.set_auth!(@username, "wrong#{@password}")
- expect { @client.get('/settings') }.to raise_error(Net::HTTPServerException)
- # Try right username
- @client.set_auth!(@username, @password)
- expect { @client.get('/settings') }.not_to raise_error
- # Make sure all routes are protected
- @client.clear_auth!
- [
- '/about',
- '/gateways/0/rgb_cct/1',
- '/remote_configs',
- '/'
- ].each do |page|
- expect { @client.get(page) }.to raise_error(Net::HTTPServerException), "No auth required for page: #{page}"
- end
- expect { @client.post('/system', {}) }.to raise_error(Net::HTTPServerException)
- # Clear auth
- @client.set_auth!(@username, @password)
- @client.put('/settings', admin_username: '', admin_password: '')
- @client.clear_auth!
- expect { @client.get('/settings') }.not_to raise_error
- end
- end
- end
|