mod delete_command {
  use pretty_assertions::assert_eq;
  use sql_query_builder as sql;

  #[test]
  fn method_delete_should_add_a_delete_clause() {
    let query = sql::Delete::new().delete_from("users").as_string();
    let expected_query = "DELETE FROM users";

    assert_eq!(query, expected_query);
  }

  #[test]
  fn method_delete_should_override_value_on_consecutive_calls() {
    let query = sql::Delete::new()
      .delete_from("users")
      .delete_from("orders")
      .as_string();
    let expected_query = "DELETE FROM orders";

    assert_eq!(query, expected_query);
  }

  #[test]
  fn method_delete_should_trim_space_of_the_argument() {
    let query = sql::Delete::new().delete_from("  orders  ").as_string();
    let expected_query = "DELETE FROM orders";

    assert_eq!(query, expected_query);
  }

  #[test]
  fn method_raw_before_should_add_raw_sql_before_delete_clause() {
    let query = sql::Delete::new()
      .raw_before(sql::DeleteClause::DeleteFrom, "/* delete users */")
      .delete_from("users")
      .as_string();
    let expected_query = "/* delete users */ DELETE FROM users";

    assert_eq!(query, expected_query);
  }

  #[test]
  fn method_raw_after_should_add_raw_sql_after_delete_clause() {
    let query = sql::Delete::new()
      .delete_from("users")
      .raw_after(sql::DeleteClause::DeleteFrom, "where login = 'foo'")
      .as_string();
    let expected_query = "DELETE FROM users where login = 'foo'";

    assert_eq!(query, expected_query);
  }
}