How can I test that an image has been sent to a user on a chat application - gherkin

I've got a chat application I'm doing Gherkin for and one of the features I'll be adding is the ability to send images of various types, I just don't know how to write this up. Could it be?
Given the following users exist:
| Username |
| Alice |
| Bob |
When "Alice" sends "Bob" "Image A"
Then "Bob" can see "Image A"
Is "Image A" the url to the image? And, if it is, where does the image reside for the test itself?

This is a common programming problem where you need to store image location in a variable and pass that variable as argument. You can pass that variable name from gherkin feature file. See Here for storing file location, hope this helps:
How to pass a text file as a argument?

Related

How to fill with space for pretty logger messages?

Is there a way to fill with spaces after the variable $nameIdDocument so that the 2nd variable (${resultPreventRequest.documentType}) always shows up at the spot ?
I like to have logger messages aligned vertically. I would like to have PASSEPORT and RESIDENCE_PERMIT start at the same position.
Here the code I execute, and the image attached is what is printed by the logger.
LOGGERCTRLONE.info("Correctly Read document | doctype found : $nameIdDocument | ${resultPreventRequest.documentType}")
logger output
I tried the java syntax with %s-20 but it does nothing, regardless where it is positioned.
I have looked up online and there is no subject about this alignment problem in Kotlin.
The Java syntax to use with formatting would be like %-20s. The conversion type, s in this case, always goes last.
fun main() {
println("%-25s | %-22s | %s".format("Correctly Read document", "some document.xyz", "some document type"))
println("%-25s | %-22s | %s".format("Incorrectly Read document", "another document2.xyz", "another document type"))
}
Prints
Correctly Read document | some document.xyz | some document type
Incorrectly Read document | another document2.xyz | another document type
Kotlin doesn't provide any built-in logging feature. The logging library you're using might have a cleaner way to do this.

Selenium "StoreText" to use in other field

Please help,
I want to use the value that i stored using storeText.
My problem is, how do i use this on the other fields of the page?
Thanks in advance!
For example:
I want to get the name of this customer, and verify it on another site if its existing by entering the name on the search field on another site?
See the "Variable substitution" paragraph of the documentation, it even has a nice example of usage for storing a name from multiple fields:
Variable substitution
Variable substitution provides a simple way to include a previously
stored variable in a command parameter. This is a simple mechanism, by
which the variable to substitute is indicated by ${variableName}.
Multiple variables can be substituted, and intermixed with static
text.
Example:
store | Mr | title
storeValue | nameField | surname
store | ${title} ${surname} | fullname
type | textElement | Full name is: ${fullname}
Why don't you get the text from the webelement store it in a global static variable and call the variable in the other test case?

add .txt email attachament from memory in visual basic

I want to send an email to a user containing a report in .txt format about changes made in a database.
The file will look like:
User | Acces | Way_of_assignment | Project
---------------------------------------------------
uid3434 direct group x1
uid4453 indirect direct x2
But I want to create this attachament exclusively in memory.
How do I do this?
Create a string in memory that represents your file.
Then, read it into a MemoryStream, using the Encoding classes to convert the string to bytes - this can be passed in to the Attachment constructor.

cucumber (LoadError) for my model

I'm sure this is basic as I'm a new Rails user and want to do Cucumber right. I spent the weekend reading the Pragmatic book and have a small project I want to create and use it. I intentionally set up my first feature as broadly as possible so that it wouldn't be brittle depending too much on how it works on the rails side. I created a new rails app using DanielKehoe's starter on github. I think I got the user figured out. But when I attempt to use Cucumber to creating my first table of Reference Units which would be a table of constants, I expected that cucumber would drive me to create a Reference Units model but I spent all morning trying to get it to do so using the book, Railscasts and stackoverflow to push me to where I'm at now. I went ahead and generated a model for Reference Units, controller with a new action and an empty view. But it now cannot figure out that I have Reference Unit model with a (LoadError). Odd because it's there in the app.
Here's my current feature:
Feature: I want to have Reference Units that I can refer to so they can be used elsewhere. That way
they can be updated in one place. I want to create and edit these Units.
Background:
Given I am logged in as the following user:
| name | "Testy McUserton" |
| password | "please" |
| email | "testy#userton.com" |
Scenario: Adding Reference Units
When I go to the new Reference Units page
And I fill in the following:
| commodity | "corn" |
| language | "en" |
| wholesale unit | "xton" |
| retail unit | "xliter" |
| receipt unit | "dollar" |
Then it should create a new Reference Unit
here is my step definition:
Given /^I am logged in as the following user:$/ do |table|
sign_up valid_user
end
When /^I go to the new Reference Units page$/ do
visit new_reference_unit_path
end
When /^I fill in the following:$/ do |table|
#reference_unit = Reference_unit.create!(table.rows_hash)
end
Then /^it should create a new Reference Unit$/ do
pending # express the regexp above with the code you wish you had
end
new_reference_unit_path is in my feature/support/paths.rb as:
when /the new Reference Units page/
'/reference_units/new'
Running this in 3.1.3 the following is in red:
Scenario: Adding Reference Units # features/user_can_create_units.feature:10
When I go to the new Reference Units page # features/step_definitions/user_create_unit_reference.rb:6
Expected /Users/sam/apps/keriakoo/app/models/reference_unit.rb to define Reference_unit (LoadError)
./app/controllers/reference_units_controller.rb:4:in `new'
./features/step_definitions/user_create_unit_reference.rb:7:in `/^I go to the new Reference Units page$/'
features/user_can_create_units.feature:11:in `When I go to the new Reference Units page'
As I mentioned above. the reference_unit.rb file is in the correct place. Of course, I haven't added any methods or attributes to it expecting cucumber to guide me at the right time. I'm sure it's something simple, but I tried all kinds of combinations of words and capitalization to shake something loose, sam
OK, I think I hit on the clue. Digging around, I used the --backtrace option on cucumber and it pointed me to a dependency with a key word of "const". OK, it doesn't like something in the text. Looking around for info on two-word models, I can tell that my model was correct: ReferenceUnit. But looking at my error output, it was looking for Reference_unit. So for laughs I altered the regex for that step to be "When /^I go to the new Reference units page$" the error went away. So the syntax of the first line is important, and not 'freestylin' as I suspected.

Do the blue dashes in cucumber features output always mean skipped?

I've understood that blue dashes in features output means the step was skipped because something before it failed but in all of my scenario outlines I get blue dashes but also a line that says all passed.
Here is my Scenario Outline.
Scenario Outline: Attempt to assign a role when not authorized
Given a <user_who_can_not_assign_roles> exists with email: "johndoe#example.com"
And that user is signed in
And I am on the user's show page
And a role exists with name: "<other_role1>"
And a role exists with name: "<other_role2>"
When I follow "Edit"
Then I should not see "Admin"
And I should not see "Manager"
And I should not see "Salesperson"
When I fill in "username" with "spuds"
And I fill in "password" with "potatoes"
And I fill in "password confirmation" with "potatoes"
And I fill in "email" with "spuds#gmail.com"
And I press "Save"
Then I should see "success"
And a role should exist with name: "<other_role1>"
And that role should not be one of the user's roles
And a role should exist with name: "<other_role2>"
And that role should not be one of the user's roles
Examples:
| user_who_can_not_assign_roles | other_role1 | other_role2 |
| manager | Admin | Salesperson |
| salesperson | Admin | Manager |
When I run this feature I get this output.
-------------------......
2 scenarios (2 passed)
38 steps (38 passed)
0m3.300s
I get that its 2 scenarios because I have 2 examples listed and 38 steps would be the 19 run twice. What I don't understand is why it shows the blue dashes (like it normally shows for skipped steps) when it also says 38 steps passed.
I would assume that this is intended when running outlines because if I change on of the steps marked with a blue dash it will show failed. I was just looking for some confirmation in the cucumber docs and I can't find anything.
I'm running rails 3.0.0, cucumber 0.9.3, and pickle 0.4.2.
The blue dashes in this case represent the parsing of the scenario outline, which is more metadata than test. I find it confusing as well. To get a better idea of what is going on, try executing:
cucumber -f pretty <your_fancy_scenario.feature>
This will force cucumber to display the actual scenario text with the color coding, instead of just the dots and dashes.
Hope that helps!