Under what condition is the available bandwidth $f_s$ instead of $\frac{f_s}{2}$?
If your signal is real-valued, then it's spectrum is conjugate symmetric. That means, that negative frequencies (or frequencies from $\frac{f_s}{2}$ up to $f_s$) are mirrored. Thus we can always neglect frequencies above Nyquist range.

Although, if your signal is complex valued, then such symmetry won't exist, and frequencies above $\frac{f_s}{2}$ contain extra information. So you can indeed say that the bandwidth of your signal is $f_s$. This somewhat makes sense, because you might represent now both real and imaginary part of your signal on your frequency axis (twice as much space is necessary). 

Here is some small example of sawtooth signal ($f_s=105Hz$), with fundamental frequency of $f_0=10 Hz$ and same signal modulated by the complex exponential with $f_{mod}=5Hz$. In such way we get time domain signal with complex values:
 $$x_{mod}(t)=x(t)e^{2\pi if_{mod}t}$$

As you can see, amplitude (phase also) spectrum for real valued signal is symmetrical around the Nyquist frequency (aliasing is also visible whilst aliased harmonics are not covered by genuine). On the contrary same sawtooth modulated by complex sinusoid (and cosinusoid) is no longer symmetrical. Probably you will notice another "feature" of this signal, while taking a closer look at peak frequencies and relating it to $f_{mod}$...



And traditionally, code:

%% Time domain parameters
fs = 105;
dt = 1/fs;
T = 10*pi;
t = 0:dt:T-dt;
N = length(t);
%% Sawtooth signal generation
f0 = 10;
x = sawtooth(2*pi*f0*t);
X = abs(fft(x))/N;
freqs = (0:N-1).*(fs/N);
subplot(211)
plot(freqs, X)
grid on
hold on
plot([fs/2 fs/2], [0 max(X)], '--r')
xlim([0 max(freqs)])
xlabel('Frequency [Hz]')
ylabel('Amplitude')
title('FT of real-valued signal')
l=legend({'sawtooth','$\frac{f_s}{2}$'});
set(l,'Interpreter','Latex');
%% Complex modulated sawtooth signal
f0_cplx = 15;
y = x.*exp(2*1i*pi*f0_cplx*t);
Y = abs(fft(y))/N;
subplot(212)
plot(freqs, Y)
grid on
hold on
plot([fs/2 fs/2], [0 max(Y)], '--r')
xlim([0 max(freqs)])
xlabel('Frequency [Hz]')
ylabel('Amplitude')
title('FT of complex-valued signal')
l=legend({'complex mod-sawtooth','$\frac{f_s}{2}$'});
set(l,'Interpreter','Latex');