The first parentheses pair, i.e. the ( immediately before the $(sudo...) and its matching ) at the end, are causing $result to be populated as an array.
To confirm this, try typing declare -p result
I expect you'll see $result as an array with either 3 elements ("Test", "is", "successful") or 2 elements ("Not", "OK"), i.e.:
declare -a result=([0]="Test" [1]="is" [2]="successful")
or
declare -a result=([0]="Not" [1]="OK")
In that case, the solution is easy - just remove the first pair of parentheses.
e.g.
result=$(sudo docker exec -ti $appid timeout 3 \
/bin/bash -c "echo > /dev/tcp/fake.url.com/80 >& /dev/null" &&
echo "Test is successful" ||
echo "Not OK")
Worth noting: when you refer to an array variable without an index (e.g. just $result instead of ${result[n]} or ${result[@]} etc), bash returns just the first (zeroth) element of the array, i.e. ${result[0]}.
That's why it seems that $result only contains the first word of the captured output.
BTW, for a possibly clearer example of what is happening here, consider the different results from these two commands:
$ result=$(echo Test is successful)
$ declare -p result
declare -- result="Test is successful"
and
$ result=($(echo Test is successful))
$ declare -p result
declare -a result=([0]="Test" [1]="is" [2]="successful")
In the first example, $result is being created as a scalar variable containing a single string value. In the second, it's being created as an array variable containing three whitespace-separated string values.