Consertando os testes funcionais.

Você precisava aqui de uma história com o atributo 'moderate' ativo, senão era
redirecionado, por isso que quebravam os testes.
Aqui dá para eliminar if's aninhados.

Se você já identificar uma situação, como a necessidade de um redirect, não
insira dentro de um if com else se dá para fazer o if e já fazer return. O
código fica mais limpo. ;-)
Parece que a ação rate também é candidata do teste de usuário logado.
Definido um método de classificação para a história.

Aqui tinha uma coisa que não é legal e nem é recomendada: você estava executando
um método do controller para fazer um retorno para o método corrente,
"transmitindo" algumas várias de instância. Não use dessa forma, pois está
sujeito à erros e não é delegação do controller fazer esse tipo de coisa.

Eu movi o método da classificação para o *model da história*. Ali, quando
acionado, enviando junto o código do usuário que está classificando a história,
já é verificado se o usuário já fez isso, saindo fora caso positivo.

Se não, já é criada uma nova classificação levando em conta os parâmetros
correntes, e utilizando create! (com o ponto de exclamação no final) para
disparar uma exceção caso alguma coisa dê errada.
Ação de favoritar uma história foi movida para o modelo.

Mesmo esquema do commit anterior: não compartilhar variáveis de instância em um
controller e mover a lógica para o model.