# frozen_string_literal: true describe WPScan::Finders::Passwords::WpLogin do subject(:finder) { described_class.new(target) } let(:target) { WPScan::Target.new(url) } let(:url) { 'http://ex.lo/' } describe '#valid_credentials?' do context 'when a non 302' do it 'returns false' do expect(finder.valid_credentials?(Typhoeus::Response.new(code: 200, headers: {}))).to be_falsey end end context 'when a 302' do let(:response) { Typhoeus::Response.new(code: 302, headers: headers) } context 'when no cookies set' do let(:headers) { {} } it 'returns false' do expect(finder.valid_credentials?(response)).to be_falsey end end context 'when no logged_in cookie set' do context 'when only one cookie set' do let(:headers) { 'Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/' } it 'returns false' do expect(finder.valid_credentials?(response)).to be_falsey end end context 'when multiple cookies set' do let(:headers) do "Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/\r\n" \ 'Set-Cookie: something=value; path=/' end it 'returns false' do expect(finder.valid_credentials?(response)).to be_falsey end end end context 'when logged_in cookie set' do let(:headers) do "Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/\r\r" \ "Set-Cookie: wordpress_xxx=yyy; path=/wp-content/plugins; httponly\r\n" \ "Set-Cookie: wordpress_xxx=yyy; path=/wp-admin; httponly\r\n" \ 'Set-Cookie: wordpress_logged_in_xxx=yyy; path=/; httponly' end it 'returns false' do expect(finder.valid_credentials?(response)).to eql true end end end end end