1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00
community.general/tests/integration/targets/read_csv/tasks/main.yml
patchback[bot] 59999a89f1
[PR #6662/bb216934 backport][stable-6] csv module utils: detect unicode BOM in content (#6694)
csv module utils: detect unicode BOM in content (#6662)

* csv module utils: detect unicode BOM in content

* fix handling of py2

* fix comment

* add changelog frag

* add missing link

* simplification

(cherry picked from commit bb2169340d)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-06-15 08:13:24 +02:00

176 lines
5.2 KiB
YAML

---
####################################################################
# WARNING: These are designed specifically for Ansible tests #
# and should not be used as examples of how to write Ansible roles #
####################################################################
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# Create basic CSV file
- name: Create unique CSV file
copy:
content: &users_content |
name,uid,gid,gecos
dag,500,500,Dag Wieërs
jeroen,501,500,Jeroen Hoekx
dest: "{{ remote_tmp_dir }}/users_unique.csv"
# Read a CSV file and access user 'dag'
- name: Read users from CSV file and return a dictionary
read_csv:
path: "{{ remote_tmp_dir }}/users_unique.csv"
key: name
register: users_unique
- assert:
that:
- users_unique.dict.dag.name == 'dag'
- users_unique.dict.dag.gecos == 'Dag Wieërs'
- users_unique.dict.dag.uid == '500'
- users_unique.dict.dag.gid == '500'
- users_unique.dict.jeroen.name == 'jeroen'
- users_unique.dict.jeroen.gecos == 'Jeroen Hoekx'
- users_unique.dict.jeroen.uid == '501'
- users_unique.dict.jeroen.gid == '500'
# Read a CSV file and access the first item
- name: Read users from CSV file and return a list
read_csv:
path: "{{ remote_tmp_dir }}/users_unique.csv"
register: users_unique
- assert:
that:
- users_unique.list.0.name == 'dag'
- users_unique.list.0.gecos == 'Dag Wieërs'
- users_unique.list.0.uid == '500'
- users_unique.list.0.gid == '500'
- users_unique.list.1.name == 'jeroen'
- users_unique.list.1.gecos == 'Jeroen Hoekx'
- users_unique.list.1.uid == '501'
- users_unique.list.1.gid == '500'
# Create basic CSV file using semi-colon
- name: Create non-unique CSV file using semi-colon
copy:
content: |
name;uid;gid;gecos
dag;500;500;Dag Wieërs
jeroen;501;500;Jeroen Hoekx
dag;502;500;Dag Wieers
dest: "{{ remote_tmp_dir }}/users_nonunique.csv"
# Read a CSV file and access user 'dag'
- name: Read users from CSV file and return a dictionary
read_csv:
path: "{{ remote_tmp_dir }}/users_nonunique.csv"
key: name
unique: false
delimiter: ';'
register: users_nonunique
- assert:
that:
- users_nonunique.dict.dag.name == 'dag'
- users_nonunique.dict.dag.gecos == 'Dag Wieers'
- users_nonunique.dict.dag.uid == '502'
- users_nonunique.dict.dag.gid == '500'
- users_nonunique.dict.jeroen.name == 'jeroen'
- users_nonunique.dict.jeroen.gecos == 'Jeroen Hoekx'
- users_nonunique.dict.jeroen.uid == '501'
- users_nonunique.dict.jeroen.gid == '500'
# Read a CSV file using an non-existing dialect
- name: Read users from CSV file and return a dictionary
read_csv:
path: "{{ remote_tmp_dir }}/users_nonunique.csv"
dialect: placebo
register: users_placebo
ignore_errors: true
- assert:
that:
- users_placebo is failed
- users_placebo.msg == "Dialect 'placebo' is not supported by your version of python."
# Create basic CSV file without header
- name: Create unique CSV file without header
copy:
content: |
dag,500,500,Dag Wieërs
jeroen,501,500,Jeroen Hoekx
dest: "{{ remote_tmp_dir }}/users_noheader.csv"
# Read a CSV file and access user 'dag'
- name: Read users from CSV file and return a dictionary
read_csv:
path: "{{ remote_tmp_dir }}/users_noheader.csv"
key: name
fieldnames: name,uid,gid,gecos
register: users_noheader
- assert:
that:
- users_noheader.dict.dag.name == 'dag'
- users_noheader.dict.dag.gecos == 'Dag Wieërs'
- users_noheader.dict.dag.uid == '500'
- users_noheader.dict.dag.gid == '500'
- users_noheader.dict.jeroen.name == 'jeroen'
- users_noheader.dict.jeroen.gecos == 'Jeroen Hoekx'
- users_noheader.dict.jeroen.uid == '501'
- users_noheader.dict.jeroen.gid == '500'
# Create broken file
- name: Create unique CSV file
copy:
content: |
name,uid,gid,gecos
dag,500,500,Dag Wieërs
jeroen,501,500,"Jeroen"Hoekx"
dest: "{{ remote_tmp_dir }}/users_broken.csv"
# Read a broken CSV file using strict
- name: Read users from a broken CSV file
read_csv:
path: "{{ remote_tmp_dir }}/users_broken.csv"
key: name
strict: true
register: users_broken
ignore_errors: true
- assert:
that:
- users_broken is failed
- "'Unable to process file' in users_broken.msg"
# Create basic CSV file with BOM
- name: Create unique CSV file with BOM
copy:
content: "{{ bom + content }}"
dest: "{{ remote_tmp_dir }}/users_bom.csv"
vars:
content: *users_content
bom: "{{ '\ufeff' }}"
# Read a CSV file and access the first item
- name: Read users from CSV file and return a list
read_csv:
path: "{{ remote_tmp_dir }}/users_bom.csv"
register: users_bom
- assert:
that:
- users_bom.list.0.name == 'dag'
- users_bom.list.0.gecos == 'Dag Wieërs'
- users_bom.list.0.uid == '500'
- users_bom.list.0.gid == '500'
- users_bom.list.1.name == 'jeroen'
- users_bom.list.1.gecos == 'Jeroen Hoekx'
- users_bom.list.1.uid == '501'
- users_bom.list.1.gid == '500'