how to check the creation of a user? rails4

please help correct test.

its a model User:
class User < ActiveRecord::Base
  before_save { = email.downcase }
  before_create :create_remember_token

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true,
                                      format: { with:
                                      uniqueness: { case_sensitive:
false }
  validates :diary_name, presence: true, uniqueness: { case_sensitive:
false }
  validates :password, length: { minimum: 6 }
  validates :name, presence: true, length: { maximum: 50 },
uniqueness: { case_sensitive: false }


  has_many :recalls
  has_many :posts, dependent: :destroy
  belongs_to :gender

  has_attached_file :avatar, :styles => { :large => "300x300>", :medium
=> "100x100>", :thumb => "30x30>" }
  validates_attachment_content_type :avatar, :content_type =>
["image/jpg", "image/jpeg", "image/png", "image/gif"]
  validates_attachment_file_name :avatar, :matches => [/png\Z/,
/jpe?g\Z/, /gif\Z/]

its a controller UserController:
class UsersController < ApplicationController
  def new
    @user =

  def create
    @user =

      sign_in @user
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else[:error] = 'Invalid data'
      render 'new'


    def user_params
      params.require(:user).permit(:name, :email, :diary_name,
:password, :gender_id, :password_confirmation, :phone, :skype, :info,
:avatar, :delete_avatar)

its a fixture user:
  name: 'onfge'
  email: ''
  remember_token: 'dc3461e13c8d316dad22332a503e06edafa0b9cb'
  phone: '43535345'
  skype: 'gggggg'
  gender: one
  info: 'MyString'
  admin: true
  avatar_file_name: nil
  avatar_content_type: nil
  avatar_file_size: nil

its a fixture genders:
  gender_name: '-'

  gender_name: 'male'

  gender_name: 'female'

a test that does not work:
class UsersControllerTest < ActionController::TestCase
  fixtures :users

  setup do
    @user = users(:one)
    @input_attributes = {
        email: '',
        gender_id: 1,
        info: 'u76u67u67u',
        name: 'fsdfsdf',
        password: 'qwerty',
        password_confirmation: 'qwerty',
        phone: '435345345',
        skype: 'sdggdfgdfgfdgd'

  test "should create user" do
    assert_difference('User.count') do
      post :create,
      user: @input_attributes

after a test run in the console I get the following error message:
  1) Failure:
"User.count" didn't change by 1.
Expected: 3
  Actual: 2

It is the message that is logged. it is clear that the transaction is
rolled back for some strange reason:
  [1m[35mUser Load (0.1ms)[0m SELECT "users".* FROM "users" WHERE
"users"."id" = ? LIMIT 1 [["id", 980190962]]
  [1m[36m (0.1ms)[0m [1mSELECT COUNT(*) FROM "users"[0m
Processing by UsersController#create as HTML
  Parameters: {"user"=>{"email"=>"", "gender_id"=>"1",
"info"=>"u76u67u67u", "name"=>"fsdfsdf", "password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]", "phone"=>"435345345",
  [1m[35m (0.1ms)[0m SAVEPOINT active_record_1
  [1m[36mUser Exists (0.1ms)[0m [1mSELECT 1 AS one FROM "users" WHERE
LOWER("users"."email") = LOWER('') LIMIT 1[0m
  [1m[35mUser Exists (0.1ms)[0m SELECT 1 AS one FROM "users" WHERE
"users"."diary_name" IS NULL LIMIT 1
  [1m[36mUser Exists (0.1ms)[0m [1mSELECT 1 AS one FROM "users" WHERE
LOWER("users"."name") = LOWER('fsdfsdf') LIMIT 1[0m
  [1m[35m (0.1ms)[0m ROLLBACK TO SAVEPOINT active_record_1

As has been suggested previously, probably one of your validations is failing.
You can use"some string") to insert output into the log
file. If you put those at appropriate points in the controller create
method you can find whether save is failing. Then you can investigate
which validation is failing.


Just gave this a quick look...
What strikes me as odd is this in your User validation:
validates :name, presence: true, length: { maximum: 50 },uniqueness: {
case_sensitive: false }
You want the user name unique yet you do not care about case sensitivity?
CAT, cat, Cat, caT....

I guess the OP means that if there already is a use CAT then he does
not want to allow another user to be called cat. Not an unreasonable
idea I think.

And then you query for: SELECT 1 AS one FROM "users" WHERE
LOWER("users"."name") = LOWER('fsdfsdf') LIMIT... That doesn't make sense to
This strikes me as bad form. Make name case_sensitive: true. And in your
SQL, remove LOWER.

The LOWER is used by rails enforce the case insensitivity, it is not
something the OP has done explicitly.