// test "create_action/1 kind: ability/fire" { // user = insert(:user) // commander = insert(:commander) // subject_user_data = build(:user_data, %{ // turn: true, // user_id: user.id, // commander_id: commander.id // }) // target_user_data = build(:user_data, %{ // turn: false, // user_id: insert(:user).id, // commander_id: commander.id // }) // attacker = unit_data(AWDS.infantry(), %{ // coord: build(:coord, %{x: 0, y: 0}), // faction: 1, // user_id: subject_user_data.user_id // }) // defender = unit_data(AWDS.infantry(), %{ // coord: build(:coord, %{x: 0, y: 4}), // faction: 2, // user_id: target_user_data.user_id // }) // map = insert(:map) // game = insert(:game, %{ // weather: "Clear", // map: map, // map_data: map.map_data, // map_type: map.map_type, // user_data: [subject_user_data, target_user_data], // unit_data: [attacker, defender], // tile_data: [] // }) // attacker = game.unit_data |> Enum.at(0) // defender = game.unit_data |> Enum.at(1) // insert(:game_user, %{game: game, faction: 1}) // insert(:game_user, %{game: game, faction: 2}) // action = build(:action, %{ // kind: "ability", // ability_id: "fire", // subject_unit_data_id: attacker.id, // target_unit_data_id: defender.id, // game_id: game.id, // user_id: user.id, // move_coords: [ // build(:coord, %{x: 0, y: 1}), // build(:coord, %{x: 0, y: 2}), // build(:coord, %{x: 0, y: 3}) // ] // }) // |> Map.from_struct() // assert {:ok, Action { // game: Game { // unit_data: [defender, attacker], // user_data: [attacker_user, defender_user] // } // } = action} = Engine.create_action(action) // assert defender.health <= 52.0 // assert defender.health >= 43.0 // assert attacker.health <= 76.0 // assert attacker.health >= 66.0 // assert defender_user.charge <= 71 // assert defender_user.charge >= 62 // assert attacker_user.charge <= 58 // assert attacker_user.charge >= 49 // }