"203.0.113.1\n", 'curl -6s https://ifconfig.io' => "2001:db8::1\n", ]); }); it('detects the public IPs when the settings are empty', function () { InstanceSettings::forceCreate(['id' => 0]); get_public_ips(); $settings = InstanceSettings::find(0); expect($settings->public_ipv4)->toBe('203.0.113.1') ->and($settings->public_ipv6)->toBe('2001:db8::1'); }); it('keeps public IPs that are already set', function () { InstanceSettings::forceCreate(['id' => 0, 'public_ipv4' => '203.0.113.21', 'public_ipv6' => '2001:db8::21']); get_public_ips(); $settings = InstanceSettings::find(0); expect($settings->public_ipv4)->toBe('203.0.113.21') ->and($settings->public_ipv6)->toBe('2001:db8::21'); Process::assertNothingRan(); }); it('detects only the address family that is empty', function () { InstanceSettings::forceCreate(['id' => 0, 'public_ipv4' => '203.0.113.21']); get_public_ips(); $settings = InstanceSettings::find(0); expect($settings->public_ipv4)->toBe('203.0.113.21') ->and($settings->public_ipv6)->toBe('2001:db8::1'); Process::assertNotRan('curl -4s https://ifconfig.io'); }); it('still detects IPv6 when the IPv4 lookup returns an invalid address', function () { Process::fake([ 'curl -4s https://ifconfig.io' => 'not-an-ip', 'curl -6s https://ifconfig.io' => "2001:db8::1\n", ]); InstanceSettings::forceCreate(['id' => 0]); get_public_ips(); $settings = InstanceSettings::find(0); expect($settings->public_ipv4)->toBeNull() ->and($settings->public_ipv6)->toBe('2001:db8::1'); });